Watch out for trailing slashes in URLs, both here in the tests and in
urls.py
—They’re a common source of bugs.
superlists/urls.py.
urlpatterns
=
patterns
(
''
,
url
(
r'^$'
,
'lists.views.home_page'
,
name
=
'home'
),
url
(
r'^lists/the-only-list-in-the-world/$'
,
'lists.views.view_list'
,
name
=
'view_list'
),
# url(r'^admin/', include(admin.site.urls)),
)
Running the tests again, we get:
AttributeError: 'module' object has no attribute 'view_list'
[...]
django.core.exceptions.ViewDoesNotExist: Could not import
lists.views.view_list. View does not exist in module lists.views.
A New View Function
Nicely self-explanatory. Let’s create a dummy view function in
lists/views.py
:
lists/views.py.
def
view_list
(
request
):
pass
Now we get:
ValueError: The view lists.views.view_list didn't return an HttpResponse
object. It returned None instead.
Let’s copy the two last lines from the
home_page
view and see if they’ll do the trick:
lists/views.py.
def
view_list
(
request
):
items
=
Item
.
objects
.
all
()
return
render
(
request
,
'home.html'
, {
'items'
:
items
})
Rerun the tests and they should pass:
Ran 8 tests in 0.016s
OK
And the FTs should get a little further on:
AssertionError: '2: Use peacock feathers to make a fly' not found in ['1: Buy
peacock feathers']
Green? Refactor
Time for a little tidying up.
Testing Views, Templates, and URLs Together with the Django Test Client
|
89