django тестирует представления с помощью декоратора login_required с соблюдением DRY

У меня есть веб-сайт, на котором все представления будут защищены с помощью @login_required, за исключением, конечно, представления входа в систему.
Однако использование декоратора приведет к сбою моих тестов, вызывающих эти представления, если я не добавлю аутентифицированного пользователя в запрос. Я знаю, что это можно сделать в setUp(), но написание одной и той же строки в любом тестовом классе не соблюдает принцип DRY.

Есть ли лучший подход, чем этот?


person ProSinq    schedule 04.04.2016    source источник


Ответы (1)


Как вы говорите, вы можете переместить логин в метод setUp, чтобы избежать дублирования в каждом тесте в тестовом классе.

Если вам не нравится дублировать метод setUp в каждом тестовом классе, вы можете создать свой собственный тестовый класс или миксин.

class LoggedInTestCase(TestCase):

    def setUp(self):
        user = User.objects.create_user(username='username', password='password')
        self.client.login(username='username', password='password')

class MyTestCase(LoggedInTestCase):
    def test_stuff(self):
        ...

Если вы переопределяете метод setUp в своем дочернем классе, не забудьте вызвать super().

class MyOtherTestCase(LoggedInTestCase):
    def setUp(self):
        super(MyOtherTestCase, self).setUp()
        # other setUp code goes here

    def test_other_stuff(self):
        ...
person Alasdair    schedule 04.04.2016
comment
как я мог пропустить это... Спасибо, что снова открыли мне глаза. - person ProSinq; 13.04.2016