我在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
但是当时失败的测试告诉我用户“foo'未登录,即使self.client.login
返回True。
另一个神秘的事情是,当我现在从装饰器中留下self.client.login
以使装饰器除了包装之外什么都不做时,那么在装饰测试方法中的正常登录也不再可能了!
我认为测试客户端存在一些上下文或范围问题。你知道什么是探针吗? P.S。:故事是关于python2.7和django-1.3.1。
答案 0 :(得分:3)
请参阅python-unittest-cant-call-decorated-test
的方法?
因为它始终是同一个用户,所以我在setUp中有它。
class SimpleTest(TestCase):
def setUp(self):
self.client.login(username='foo', password='bar')
这是一个有趣的gist - Lazy man's Django testcase,允许范围登录。