Django test несколько тестовых примеров в цикле for

Я хочу протестировать представление регистра в проекте django,

поэтому я создаю несколько фальшивых тестовых случаев (self.correct_samples)

после успешной регистрации он должен перенаправить на главную страницу, что означает, что код состояния должен быть 302.

from django.test import TestCase
from django.urls.base import reverse


class RegisterTests(TestCase):

    def setUp(self):
        url = reverse('account:register')
        self.response = self.client.get(url)

        self.correct_samples = (
            ('testuser1@email.com', 'testuser', 'test112233', 'test112233'),
            ('fakeuser@email.com', 'fake123', 'fakeuser111', 'fakeuser111'),
            ('correct@email.com', 'Jack', 'myfavorite', 'myfavorite'),

            ('failemail', 'Jack', 'myfavorite', 'myfavorite'),  # fail for purpose
        )

    def test_register_form(self):

        for test_case in self.correct_samples:

            email, username, password1, password2 = test_case
            self.response = self.client.post(reverse('account:register'), data={
                'email': email,
                'username': username,
                'password1': password1,
                'password2': password2,
            })

            self.assertEqual(self.response.status_code, 302)
            self.assertRedirects(
                self.response, expected_url='/', status_code=302, target_status_code=200)

Четвертые данные в self.correct_samples, которые являются ('failemail', 'Jack', 'myfavorite', 'myfavorite'), должны быть неудачным случаем.

но после python manage.py test. Она прошла.

(env) C:\Users\User\myblog>python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
C:\Users\User\myblog\env\lib\site-packages\whitenoise\base.py:115: UserWarning: No directory at: C:\Users\User\myblog\staticfiles\
  warnings.warn(u"No directory at: {}".format(root))
.
----------------------------------------------------------------------
Ran 1 test in 0.195s

OK
Destroying test database for alias 'default'...

Вот тут и начинается самое сложное,

не получилось после переключения порядка с четвертого на первый.

from django.test import TestCase
from django.urls.base import reverse


class RegisterTests(TestCase):

    def setUp(self):
        ...

        self.correct_samples = (
            ('failemail', 'Jack', 'myfavorite', 'myfavorite'),  # fail for purpose

            ('testuser1@email.com', 'testuser', 'test112233', 'test112233'),
            ('fakeuser@email.com', 'fake123', 'fakeuser111', 'fakeuser111'),
            ('correct@email.com', 'Jack', 'myfavorite', 'myfavorite'),
        )

    def test_register_form(self):
        ...

результат:

(env) C:\Users\User\myblog>python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
C:\Users\User\myblog\env\lib\site-packages\whitenoise\base.py:115: UserWarning: No directory at: C:\Users\User\myblog\staticfiles\
  warnings.warn(u"No directory at: {}".format(root))
F
======================================================================
FAIL: test_register_form (account.tests.RegisterTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\User\myblog\account\tests.py", line 34, in test_register_form
    self.assertEqual(self.response.status_code, 302)
AssertionError: 200 != 302

----------------------------------------------------------------------
Ran 1 test in 0.026s

FAILED (failures=1)
Destroying test database for alias 'default'...

Почему это произошло?

Я искал связанные ключевые слова, такие как unittest in forloop, multiple testcases in forloop,

но, похоже, ответов на него нет, или, может быть, поискать по другим ключевым словам?

или я что-то упустил или неправильно понял?

Спасибо за помощь.

Проблема решена!

Вопросы Как генерировать динамические (параметризованные) модульные тесты в Python?

Решение: параметризованный

Вернуться на верх