2013-11-14 2 views
0

У меня проблема с написанием тестов для Django (только с этой рамки). Все работает безупречно в браузере, но когда я использую TestCase, кажется, что метод запроса не является POST. Вот код:Django test client - sendng POST data возвращает 400 error

views.py:

def save(request, quiz_id): 
    try: 
     quiz = get_object_or_404(Quiz, pk=quiz_id) 
     qset = Question.objects.filter(quiz=quiz_id) 
    except IndexError: 
     raise Http404 
    questions = [] 
    if request.method == 'POST': 
     f = QuizForm(request.POST, qset) 
     if f.is_valid(): 
      do_stuff() 
      return render(request, 'quiz/results.html', {'questions': questions}) 
    return HttpResponseBadRequest() 

tests.py:

def test_results(self): 
    post_data = { 
     'ans10': 43, 
     'ans6' : 28, 
     'ans7' : 33, 
     'ans8' : 36, 
     'ans9' : 38, 
    } 
    resp = self.client.post('/1/save/', post_data) 
    self.assertEqual(resp.status_code, 200) 

И работает тест:

self.assertEqual(resp.status_code, 200) 
AssertionError: 400 != 200 

форма действительно, прошло данные правильно, в браузере, как я уже сказал, все работает. У меня только проблема с этим тестом, похоже, что метод запроса не POST. Спасибо за любую помощь.

+0

Исправьте свой отступ кода. –

+0

В файле все в порядке;) Но я исправлю. –

+0

Что такое шаблон url? – Alasdair

ответ

1

Трудно сказать, учитывая ваш сломанный отступ, но, похоже, ваше мнение вернет только 200, если это POST-запрос и форма действительна. Может быть, ваша форма не подтверждается?

Считается, что рекомендуемый поток - это перенаправление на страницу результатов успешных сообщений (google для «post redirect get»), чтобы избежать двойных представлений при перезагрузке страницы.

никак не связаны, но ни одно из утверждений в попытке/ожидать блок будет поднимать IndexError, и если Question имеет ForeignKey на Quizz вы должны быть в состоянии получить вопросы непосредственно с quizz.question_set.all().

Смежные вопросы