如何测试仅用于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源代码以获得答案,但我找不到我的用例。
答案 0 :(得分:1)
由于没有建议的传统解决方案,我找到了一个简单的解决方案:
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
没有任何问题,解决方案运作正常。