如何测试仅用于 django 的 TestCase 方法的装饰器?我有一个装饰器,它创建管理员用户并将用户登录到测试客户端:
def create_admin_user_and_login(func):
@wraps(func)
def wrapper(self):
faker = Faker()
username = faker.pronounceable_unique_id(length=30)
password = faker.password()
user = User.objects.create_user(
username=username,
first_name=faker.word().title(),
last_name=faker.word().title(),
email=faker.email(),
password=password)
user.is_staff = True
user.is_superuser = True
user.save()
self.client.login(username=username, password=password)
return func(self)
return wrapper
其中Faker()
是一个假数据生成器,与主题无关。我这样使用这个装饰器:
class SomeUnitTest(TestCase):
@create_admin_user_and_login
def test_login_required(self):
self.assertContains(self.client.get(reverse('some_url')), 'logged in')
如何测试这个装饰器?我查看了 cpython 源代码来寻找答案,但找不到我的用例。
最佳答案
由于没有建议的常规解决方案,我采用了一个简单的解决方案:
class HelpersTest(TestCase):
@helpers.create_admin_user_and_login
def test_create_admin_user_and_login(self):
self.assertIn('_auth_user_id', self.client.session)
user = User.objects.get(pk=self.client.session['_auth_user_id'])
self.assertTrue(user.is_staff)
self.assertTrue(user.is_superuser)
我认为我可能在 coverage.py
捕获该问题时遇到一些问题,但这不是主要因素。
更新:coverage.py
没有问题,解决方案完美运行。
关于python - 测试测试函数装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20724950/