I encountered a problem with unit tests when use i18 in my project.
My project uses framewoks i18 and webapp2
The function uses the translation by i18. But when I test, I get the error - missing global variable request.
For example it is:
from unittest import TestCase, main
from webapp2_extras.i18n import lazy_gettext as _
def Hello(a):
if a > 0:
message = _('My great message!11 a > 0')
else:
message = _('My great message!11 a =< 0')
return message
class TestHandler(TestCase):
def testHello0(self):
self.assertEqual(Hello(0), 'My great message!11 a =< 0')
def testHello3(self):
self.assertEqual(Hello(3), 'My great message!11 a > 0')
if __name__ == '__main__':
main()
and I have message:
FAIL: testHello0 (text3.TestHandler)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/text3.py", line 14, in testHello0
self.assertEqual(Hello(0), 'My great message!11 a =< 0')
AssertionError: Request global variable is not set.
У меня есть решение этой проблемы, но оно мне не нравится. Это костыль. Как вы можете протестировать мою функцию без использования фреймворков на подобии webapp2
from unittest import TestCase, main
from webapp2_extras.i18n import lazy_gettext as _
import webapp2
def Hello(a):
if a > 0:
message = _('My great message!11 a > 0')
else:
message = _('My great message!11 a =< 0')
return message
class OneHandler(webapp2.RequestHandler):
def get(self):
myNumber = self.request.get('myNumber')
myNumber = int(myNumber)
message = Hello(myNumber)
self.response.write(message)
routes = [('/One', OneHandler)]
app = webapp2.WSGIApplication(routes = routes)
class TestHandler(TestCase):
def testHello0(self):
myNumber = 0
URL = '/One?myNumber=%s' % myNumber
self.response = app.get_response(URL)
self.mess = self.response.body
self.assertEqual(self.mess, 'My great message!11 a =< 0')
def testHello3(self):
myNumber = 3
URL = '/One?myNumber=%s' % myNumber
self.response = app.get_response(URL)
self.mess = self.response.body
self.assertEqual(self.mess, 'My great message!11 a > 0')
if __name__ == '__main__':
main()
и молодец!
Ran 2 tests in 0.047s OK
Но это не очень хорошее решение. Как я могу протестировать свою функцию и не использовать webapp2 и т. д.?