2013-12-22 5 views
1

Как проверить декоратор, который используется исключительно для методов TestCase для django? У меня есть декоратор, который создает администратор пользователя и пользователь регистрируется в тестовом клиенте:Тестирование декоратора тестовой функции

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, решение работает просто отлично.

Смежные вопросы