У меня проблемы с тестированием на Django. Я читал документацию of the responses, и я не могу сделать то же самое, что они объясняют в документации.Неверное поведение, выполняющее тесты на Django
Когда я получаю ответ, я только иметь доступ к response.status_code
и не может получить доступ к context
или redirect_chain
, когда я пишу response.(and now PyCharm shows all available options)
.
Я проверил на settings.py
и у меня есть 'BACKEND': 'django.template.backends.django.DjangoTemplates'
, чтобы убедиться, что я использую шаблоны Django, поэтому я не знаю, почему не работает тест. Мне нужно что-то настроить?
Код теста я пытаюсь сделать это:
from django.test import TestCase
from django.test.client import Client
class Test(TestCase):
def testLogin(self):
client = Client()
headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'}
data = {}
response = self.client.post('/login/', headers=headers, data=data, secure=True, follow=True)
assert (response.status_code == 200)
# self.assertRedirects(response, '/menu/', status_code=301, target_status_code=200)
Я не использую проверку подлинности Django, форма Логин отправляет данные МВУ и если IDP посылает с правильным ответом , то «Логин» это успешно:
def login(request):
logout(request)
message = None
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST['username']
password = request.POST['password']
headers = {'X-OpenAM-Username': username, 'X-OpenAM-Password': password, 'Content-Type': 'application/json'}
data = {}
req = requests.post('http://openam.idp.com:8090/openamIDP/json/authenticate', headers=headers, params=data)
if req.status_code == 200:
respJson = json.loads(req.content)
tokenIdJson = respJson['tokenId']
request.session['tokenId'] = tokenIdJson
return render_to_response('menu/menu.html', request)
elif req.status_code == 401:
message = "Invalid username and/or password. Please, try again"
else:
form = LoginForm()
return render_to_response('registration/login.html', {'message': message, 'form': form},
context_instance=RequestContext(request))
перенаправление утверждают, что это заметил, потому что теперь он терпит неудачу, когда я делаю отладки я вижу пустой redirect_chain
. Я не понимаю, почему это происходит, потому что работа в Интернете все работает, все представления перенаправляются, как ожидалось.
Почему я могу проверить только status_code
? Я делаю что-то неправильно, когда я перенаправляю после успешного входа в систему, который при обычном использовании работает, но на тест нет?
Спасибо.
Привет, спасибо за Ваш ответ, но после передачи учетных данных, как после данных я все еще получаю пустой «redirect_chain» и «AssertionError: Response не перенаправлялся, как ожидалось: код ответа был 200 (ожидается 301)» – Aker666
@ Aker666 При более близком рассмотрении вы даже не используете перенаправление. Даже если форма действительна и пользователь успешно прошел аутентификацию, вы возвращаете ответ с помощью 'render_to_response', вместо того, чтобы использовать [' redirect'] (https://docs.djangoproject.com/en/1.10/topics/http/shortcuts/# переадресация) или напрямую возвращать 'HttpResponseRedirect'. – knbk
О, я изучаю Джанго и этого не замечал. Теперь это работает, спасибо! – Aker666