Note that there are some explanatory texts on larger screens.

plurals
  1. POAdding extra filter to polls urls.py causes tests to fail
    primarykey
    data
    text
    <p>Following the tutorial at djangoproject, I have tried to have urls.py filter out the polls with no choices with the urlpattern below.</p> <pre><code>urlpatterns = patterns('', url(r'^$', ListView.as_view( queryset=Poll.objects.filter(choice__choice_text__isnull=False) \ .filter(pub_date__lte=timezone.now) \ .order_by('-pub_date')[:5], context_object_name='latest_polls', template_name='polls/index.html'), name='index'), url(r'^(?P&lt;pk&gt;\d+)/$', DetailView.as_view( queryset=Poll.objects.filter(choice__choice_text__isnull=False) \ .filter(pub_date__lte=timezone.now), model=Poll, template_name='polls/detail.html'), name='detail'), url(r'^(?P&lt;pk&gt;\d+)/results/$', DetailView.as_view( queryset=Poll.objects.filter(choice__choice_text__isnull=False) \ .filter(pub_date__lte=timezone.now), model=Poll, template_name='polls/results.html'), name='results'), url(r'^(?P&lt;poll_id&gt;\d+)/vote/$', 'polls.views.vote', name='vote'), ) </code></pre> <p>However, when I run the tests from the tutorial, an assertion error occurs for each test that creates a past_poll, similar to the error below.</p> <pre><code>AssertionError: Lists differ: [] != ['&lt;Poll: Past poll.&gt;'] Second list contains 1 additional elements. First extra element 0: &lt;Poll: Past poll.&gt; - [] + ['&lt;Poll: Past poll.&gt;'] </code></pre> <p>Before I changed the queryset to filter out all polls w/o choices the tests didn't fail. I have tested the filter in the shell and it works and running the app on the django server also doesn't seem to have any problems. What is going wrong?</p> <p>Here is the tests.py file that I used</p> <pre><code>import datetime from django.utils import timezone from django.core.urlresolvers import reverse from django.test import TestCase from polls.models import Poll def create_poll(question, days): """ Creates a poll with the given `question` published the given number of `days` offset to now (negative for polls published in the past, positive for polls that have yet to be published). """ return Poll.objects.create(question=question, pub_date=timezone.now() + datetime.timedelta(days=days)) class PollIndexDetailTests(TestCase): def test_detail_view_with_a_future_poll(self): """ The detail view of a poll with a pub_date in the future should return a 404 not found. """ future_poll = create_poll(question='Future poll.', days=5) response = self.client.get(reverse('polls:detail', args=(future_poll.id,))) self.assertEqual(response.status_code, 404) def test_detail_view_with_a_past_poll(self): """ The detail view of a poll with a pub_date in the past should display the poll's question. """ past_poll = create_poll(question='Past Poll.', days=-5) response = self.client.get(reverse('polls:detail', args=(past_poll.id,))) self.assertContains(response, past_poll.question, status_code=200) class PollIndexResultsTests(TestCase): def test_results_view_with_a_future_poll(self): """ The results view of a poll with a pub_date in the future should return a 404 not found. """ future_poll = create_poll(question='Future poll.', days=5) response = self.client.get(reverse('polls:results', args=(future_poll.id,))) self.assertEqual(response.status_code, 404) def test_results_view_with_a_past_poll(self): """ The results view of a poll with a pub_date in the past should display the poll's question. """ past_poll = create_poll(question='Past Poll.', days=-5) response = self.client.get(reverse('polls:results', args=(past_poll.id,))) self.assertContains(response, past_poll.question, status_code=200) class PollViewTests(TestCase): def test_index_view_with_no_polls(self): """ If no polls exist, an appropriate message should be displayed. """ response = self.client.get(reverse('polls:index')) self.assertEqual(response.status_code, 200) self.assertContains(response, "No polls are available.") self.assertQuerysetEqual(response.context['latest_polls'], []) def test_index_view_with_a_past_poll(self): """ Polls with a pub_date in the past should be displayed on the index page. """ create_poll(question="Past poll.", days=-30) response = self.client.get(reverse('polls:index')) self.assertQuerysetEqual( response.context['latest_polls'], ['&lt;Poll: Past poll.&gt;'] ) def test_index_view_with_a_future_poll(self): """ Polls with a pub_date in the future should not be displayed on the index page. """ create_poll(question="Future poll.", days=30) response = self.client.get(reverse('polls:index')) self.assertContains(response, "No polls are available.", status_code=200) self.assertQuerysetEqual(response.context['latest_polls'], []) def test_index_view_with_future_poll_and_past_poll(self): """ Even if both past and future polls exist, only past polls should be displayed. """ create_poll(question="Past poll.", days=-30) create_poll(question="Future poll.", days=30) response = self.client.get(reverse('polls:index')) self.assertQuerysetEqual( response.context['latest_polls'], ['&lt;Poll: Past poll.&gt;'] ) def test_index_view_with_two_past_polls(self): """ The polls index page may display multiple polls. """ create_poll(question="Past poll 1.", days=-30) create_poll(question="Past poll 2.", days=-5) response = self.client.get(reverse('polls:index')) self.assertQuerysetEqual( response.context['latest_polls'], ['&lt;Poll: Past poll 2.&gt;', '&lt;Poll: Past poll 1.&gt;'] ) class PollMethodTests(TestCase): def test_was_published_recently_with_future_poll(self): """ was_published_recently() should return False for polls whose pub_date is in the future """ future_poll = Poll(pub_date=timezone.now() + datetime.timedelta(days=30)) self.assertEqual(future_poll.was_published_recently(), False) def test_was_published_recently_with_old_poll(self): """ was_published_recently() should return False for polls whose pub_date is older than 1 day """ old_poll = Poll(pub_date=timezone.now() - datetime.timedelta(days=30)) self.assertEqual(old_poll.was_published_recently(), False) def test_was_published_recently_with_recent_poll(self): """ was_published_recently() should return True for polls whose pub_date is within the last day """ recent_poll = Poll(pub_date=timezone.now() - datetime.timedelta(hours=1)) self.assertEqual(recent_poll.was_published_recently(), True) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload