Django Tutorial Part 5, Test detail view with a past question failure.

107 views
Skip to first unread message

Vpeguero

unread,
Jan 19, 2017, 2:21:38 PM1/19/17
to Django users
I'm currently working through the django tutorial for v1.10. On part 5 the final test that is created is raising an assertion error as follows:

Creating test database for alias 'default'...
.F........
======================================================================
FAIL: test_detail_view_with_a_past_question (polls.tests.QuestionIndexDetailTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/dufort/code/django-tutorials/mysite/polls/tests.py", line 122, in test_detail_view_with_a_past_question
    self.assertContains(response, past_question.question_text)
  File "/tmp/bash-venv/8918/lib/python2.7/site-packages/django/test/testcases.py", line 382, in assertContains
    self.assertTrue(real_count != 0, msg_prefix + "Couldn't find %s in response" % text_repr)
AssertionError: Couldn't find 'Past Question.' in response

----------------------------------------------------------------------
Ran 10 tests in 0.045s

FAILED (failures=1)
Destroying test database for alias 'default'...



The following is the specific test being used 

import datetime

from django.utils import timezone
from django.test import TestCase
from django.urls import reverse

from .models import Question

...

def create_question(question_text, days):
    """
    Creates a question with the given 'question_text' and published the
    given number of 'days'offset to now (negative for question published in the past,
    positive for questions that have yet to be published.
    """
    time = timezone.now() + datetime.timedelta(days=days)
    return Question.objects.create(question_text=question_text, pub_date=time)


...

class QuestionIndexDetailTests(TestCase):

    ...

    def test_detail_view_with_a_past_question(self):
        """
        The detail view of a question with a pub_date in the past should
        display the question's text.
        """
        past_question = create_question(question_text='Past Question.', days=-5)
        url = reverse('polls:detail', args=(past_question.id,))
        response = self.client.get(url)
        self.assertContains(response, past_question.question_text)




Views:
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views import generic
from django.utils import timezone

from .models import Choice, Question
# Create your views here.

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """ 
        Return the last five published questions
        (not including those set to be published in the future.)
        """
        return Question.objects.filter(
            pub_date__lte=timezone.now()
        ).order_by('-pub_date')[:5]

class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'

    def get_queryset(self):
        """
        Excludes any questions that aren't published yet.
        """
        return Question.objects.filter(pub_date__lte=timezone.now())

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'

def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))                                                                                                                                                                                                  
                                                                                                                                        
 
I've decided to move forward with the tutorials. I am having trouble identifying if this is a bug in the tutorial itself or if there is just something missing in my code that is causing this error.



jorr...@gmail.com

unread,
Jan 20, 2017, 8:10:49 AM1/20/17
to Django users
You mean that after you make the changes the tutorial gives you the test still fails? It is supposed to fail the first time before you make the changes.
Reply all
Reply to author
Forward
0 new messages