Как проверить функцию создания в Django? - PullRequest
0 голосов
/ 21 февраля 2020
# my .views
def post_create_view(request):
    form = PostModelForm(request.POST or None)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.user = request.user
        obj.save()
        form = PostModelForm()
    context = {'form': form}
    return render(request, 'form.html', context)

# my .urls
path('create/', post_create_view, name='create')

# my .test

class TestViews(TestCase):

    def setUp(self):
        self.client = Client()
        self.create_url = reverse('posts:create')
        self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
        self.post1 = Post.objects.create(user=self.user, title='testpost', content='fgh')
        self.query = Post.objects.all()

    def test_blog_create_POST(self):
# this is where the error surely is
        response = self.client.post(self.create_url, {'title': 'testpost2', 'content': 'asd'})
        self.assertEqual(response.status_code, 302)
# this is where the test fail
        self.assertEqual(self.query.last().title, "testpost2")

'testpost2' не создается, но моя форма работает нормально. Как я могу симулировать входные данные в моем тестовом примере? self.create_url перенаправляет на правильный URL-адрес, тот, который имеет форму в шаблоне, такая форма прекрасно работает, но когда я пишу ответ в моем тесте, словарь, который я передаю в качестве второго аргумента, кажется, не до go.

1 Ответ

0 голосов
/ 21 февраля 2020

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

Если эта конечная точка используется только для запроса POST, тогда вам нужно отобразить ошибок формы в вашем шаблоне. Или, если вы считаете, что перенаправление лучше в вашем случае, если is_valid() возвращает false, просто выполните redirect .

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