我有一个龙卷风网络应用程序。许多页面都需要有效的cookie才能访问。这使得无法测试这些处理程序。
我想使用mock
库来模拟tornado.web.RequestHandler.get_current_user
方法。但我无法做对。
这就是我现在正在做的事情:
class MyUT(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
settings = {
"template_path": '../../../templates',
"cookie_secret": 'secret',
"login_url": '/admin/login',
"debug": True
}
return Application([
(r'/admin/create/super', handlers.CreateSuperUserHandler)
], **settings)
def testGet(self):
with mock.patch.object(handlers.CreateSuperUserHandler, 'get_current_user') as m:
m.return_value = {}
response = self.fetch('/admin/create/super')
print(response.body)
self.assertGreater(response.body.index('create'), 0)
如果我执行此代码,则会出现404错误。因为我没有定义登录hanlder 。但是我希望模拟的get_current_user
方法返回一个用户对象,所以在测试时不要去登录页面。
我发现一个奇怪的事情是,如果我在m.assert_any_call()
块中添加with
,则没有断言错误。
答案 0 :(得分:1)
如果@authenticated
返回虚假值,get_current_user
装饰器会重定向到登录页面。尝试返回非空字典。
您还在一个地方使用handlers.CreateSuperUserHandler
,在另一个地方使用handlers.AdminArea.CreateSuperUserHandler
;那些是同一类对象吗?