Django 2 Тестовый ответ для действительной и недействительной формы - PullRequest
0 голосов
/ 26 апреля 2018

Я сделал TestCase, чтобы проверить, получу ли я правильный ответ и перенаправление страницы, но это не работает так, как я думал. Когда я попробовал действительную форму, я получил ожидаемый ответ, но когда я сделал ее недействительной, я все равно получил тот же ответ.

views.py (я остановил 'GET' 'else:')

def create_employee_profile(request):

if request.POST:
    name_form = EmployeeNameForm(request.POST)

    if name_form.is_valid():
        new_name_form = name_form.save()
        return redirect(new_name_form)

    else:
        return render(request,
                'service/create_or_update_profile.html',
                    {'name_form': name_form}
                    )

Test.py

class TestCreateEmployeeProfileView(TestCase):

def test_redirect_on_success(self):
    response = self.client.post('/service/', {
                'first_name': 'Test',    # Required
                'middile_name': 'Testy', # Optional
                'last_name': '',         # Required
                })

    self.assertEqual(response.status_code, 200)

Полагаю, пока я задаю вопрос, я также могу спросить, как получить доступ к redirect, чтобы проверить это.

В случае успеха новый путь должен быть /service/name/1/, где «1» - это «pk» созданного объекта.

Я знаю, что видел SimpleTestCase, но я не нашел хорошего примера или учебника по его использованию.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вот два сценария:

  1. Ваша форма действительна, она будет сохранена и будет перенаправлена ​​на new_name_form, что означает успешное перенаправление. Поскольку это успешное перенаправление, вы получите код состояния 200.

  2. То же самое произойдет, когда ваша форма будет недействительной, то есть начнется рендеринг страницы create_or_update_profile. Отсюда успешный рендеринг и 200 кодов состояния.

Таким образом, в любом случае вы получите успешное перенаправление.

Если вы хотите проверить форму, это лучший подход:

from form import EmployeeNameForm

class TestCreateEmployeeProfileView(TestCase):

    def test_redirect_on_success(self):
        form = UserForm(data='first_name': 'Test',    # Required
                'middile_name': 'Testy', # Optional
                'last_name': '',)
        self.assertTrue(form.is_valid())

    def test_redirect_on_failure(self):
        form = UserForm(data='first_name': 'Test',    # Required
                'middile_name': 'Testy', # Optional
                'last_name': '',)
        self.assertFalse(form.is_valid())

Нет необходимости проверять перенаправление. Это, безусловно, будет хорошо работать, если форма действительна.

Надеюсь, это помогло.

0 голосов
/ 26 апреля 2018

Если вы всегда получаете 200, то это потому, что ваша форма всегда недействительна. Ваш взгляд перенаправляет на успешное сохранение, которое является 302.

Чтобы проверить, что форма сохранена, нужно проверить, действительно ли новый элемент находится в базе данных:

self.assertTrue(Employee.objects.filter(first_name='Testy').exists()) 

или что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...