Django Test Client client.post () отправляет GET-запрос в мой Testcase - PullRequest
0 голосов
/ 26 апреля 2019

Как я могу отправить запрос POST с помощью тестового клиента Django? Я просто хочу проверить функцию входа в мое приложение. Странно что ставлю response = self.client.post(reverse('rbac:login'), data=data) в моем тестовом примере, и я хочу проверить его, поэтому я печатаю response.status_code. На самом деле он должен возвращать 302 коза, он должен перейти на другую страницу. но он возвращает 200. Такая ситуация возникает, когда я использую «python manage.py test testmodel» для проверки. Однако, если я использую «python manage.py shell», чтобы создать InteractiveConsole и написать точно такой же код, он, наконец, вернет 302.

Я почти перепробовал все методы, предоставляемые при переполнении стека, например, измените URL, предложите тип контента, когда я публикую… но это бессмысленно.

from django.test import TestCase
from django.test.utils import setup_test_environment,teardown_test_environment
from django.test import Client
from django.urls import reverse
import django
from rbac.models import RbacUser, RbacRole
from system_module.models import Redeploy
from urllib import urlencode
class CreateUser(TestCase):
    @classmethod
    def setUp(self):
        self.client = Client()

    def test_create_user(self):
        data = {"Username": "admin_xy", "Password": "aaa"}

        response = self.client.post(reverse('rbac:login'), data=data)
        print response

и это показывает мне 200 ..... Однако в интерактивной консоли:

>>> response = client.post(reverse('rbac:login'), data=data)
>>> print response.status_code                                                                                                                 
302

показывает правильный результат. Я хочу знать, как справиться с этой надоедливой проблемой. Thx

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

1 Ответ

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

Вы можете установить функцию follow = True to .post, как описано в документации https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.Client.get

response = c.post('/redirect_me/', follow=True)
response.redirect_chain
[('http://testserver/next/', 302), ('http://testserver/final/', 302)]

Она позволяет получить доступ к цепочке перенаправления через response.redirect_chain.Если цепочка перенаправления не включает перенаправления, в тестах вы ведете себя иначе, чем в оболочке.

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