我在 django 测试中使用登录装饰器时遇到问题。许多测试都以
开始self.client.login(username='foo', password='bar')
所以,登录原则上是有效的;但现在我想将这行代码重构为装饰器 login
,只是为了好玩:
def login(fn):
def wrapper(self):
self.client.login(username='foo', password='bar')
return fn(self)
return wrapper
但随后失败的测试表明,即使 self.client.login
返回 True,用户“foo”也未登录。
还有一件更神秘的事情是,当我现在从装饰器中离开 self.client.login 使得装饰器除了包装之外什么都不做时,从装饰的测试方法中正常登录是不可能的也不再这样了!
我认为测试客户端存在一些上下文或范围问题。你知道问题是什么吗? P.S.:这个故事都是关于 python2.7 和 django-1.3.1 的。
最佳答案
请参阅python-unittest-cant-call-decorated-test
替代方案?
由于它始终是同一用户,因此我将其放在设置中。
class SimpleTest(TestCase):
def setUp(self):
self.client.login(username='foo', password='bar')
这是一个有趣的 gist - Lazy man's Django testcase允许范围内的登录。
关于python - Django 测试 : Using a login decorator for test cases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932950/