2013-12-22 37 views
1

如何测试仅用于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源代码的答案,但找不到我的用例。

回答

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没有问题,解决方案完美地工作。