と一致しないresponse.content.decode():Render_to_stringと、私はこの本と一緒に従うことによって、私の最初の<code>Django</code>のアプリを書いて
が本であることを検証されたテストがありますhtmlが返されています。私はDjango Template Language
を使用して、私のHTMLにcsrf token
を追加したので、私のテストは、assertEqual
テストに失敗している
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)
:ここではテストがあります。ここに私の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"/>
{% csrf_token %}
</form>
<table id="id_list_table">
<tr><td>{{ new_item_list }}</td></tr>
</table>
</body>
</html>
私のアサートがトークンを含まないrender_to_string
方法による失敗しています。ここに私の2つのprint
文は私のテストプリントアウトに含まものです:彼は本の中で、この問題を(彼は1.8
を使用しています)がありません
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.
ので、私はメソッドの動作が変更された場合不思議、またはどのようにして私はこのテストをパスすると書いています。
「テスト駆動型開発」の本はもともとDjango 1.7用に書かれたものです。本がDjango 1.8にアップグレードされたときに、この部分が見逃されているようです。ここでは – Alasdair
の著者です。実際には1.8の場合、1.9に切り替えるとバグが発生します。本のインストール手順は、あなたが1.8に固執しなければならないと明確に言います... – hwjp
@hwjp私の過ちは、テストはDjango 1.8をパスし、インストール手順は明らかに1.8に固執すると言います。私はDjango 1.9を使っていました。私は1.8のテストをしていると思っていました。おっとっと! – Alasdair