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?