2013-12-22 106 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沒有問題,解決方案完美地工作。