Piszę mojego pierwszego Django
aplikację, wykonując wraz z tej książki:render_to_string i response.content.decode() nie pasujące
W książce znajduje się test, który sprawdza, że html jest zwracany tak, jak powinien. Tutaj jest test:
def test_home_page_returns_correct_html(self):
request = HttpRequest()
response = home_page(request)
expected_html = render_to_string('home.html')
print(expected_html)
print(response.content.decode())
self.assertEqual(response.content.decode(), expected_html)
Moja próba zawodzi na teście assertEqual
bo dodałem csrf token
w moim HTML przy użyciu Django Template Language
. Oto co moja strona HTML wygląda następująco:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
{% csrf_token %}
</form>
<table id="id_list_table">
<tr><td>{{ new_item_list }}</td></tr>
</table>
</body>
</html>
Moja assert się niepowodzeniem ze względu na metodę render_to_string
nie wliczając tokena. Oto co moje dwa print
stwierdzenia zawarte w moim testowym wydruku:
F<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
</form>
<table id="id_list_table">
<tr><td></td></tr>
</table>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
<input type='hidden' name='csrfmiddlewaretoken' value='VAiGvXZLHCjxWEWdjhgQRBwBSnMVoIWR' />
</form>
<table id="id_list_table">
<tr><td></td></tr>
</table>
</body>
</html>
F.
On nie ma tego problemu w książce (on używa 1.8
), więc zastanawiałem się, czy zachowanie metoda uległa zmianie, lub jak Napisałbym ten test do zaliczenia.
Książka testowa Driven Development została oryginalnie napisana dla Django 1.7. Wygląda na to, że ta część mogła zostać pominięta, gdy książka została uaktualniona do wersji Django 1.8. – Alasdair
autora tutaj. Właściwie jest to poprawne na 1.8, błąd pojawia się po zmianie na 1.9. instrukcje instalacji w książce wyraźnie mówią, że musisz trzymać się 1.8, mamrocząć narzekać ... – hwjp
@hwjp Mój błąd, test przechodzi w Django 1.8, instrukcje instalacji wyraźnie mówią, aby trzymać się 1.8. Używałem Django 1.9, gdy myślałem, że testowałem 1.8. Ups! – Alasdair