2016-03-10 14 views
6

と一致しないresponse.content.decode():Render_to_stringと、私はこの本と一緒に従うことによって、私の最初の<code>Django</code>のアプリを書いて

http://chimera.labs.oreilly.com/books/1234000000754/ch05.html#_passing_python_variables_to_be_rendered_in_the_template

が本であることを検証されたテストがあります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. 

ので、私はメソッドの動作が変更された場合不思議、またはどのようにして私はこのテストをパスすると書いています。

+1

「テスト駆動型開発」の本はもともとDjango 1.7用に書かれたものです。本がDjango 1.8にアップグレードされたときに、この部分が見逃されているようです。ここでは – Alasdair

+4

の著者です。実際には1.8の場合、1.9に切り替えるとバグが発生します。本のインストール手順は、あなたが1.8に固執しなければならないと明確に言います... – hwjp

+0

@hwjp私の過ちは、テストはDjango 1.8をパスし、インストール手順は明らかに1.8に固執すると言います。私はDjango 1.9を使っていました。私は1.8のテストをしていると思っていました。おっとっと! – Alasdair

答えて

5

request引数がDjango 1.8のrender_to_stringに追加されました。あなたは、あなたのテストの行を変更してみてください:唯一のジャンゴ1.9+でこの変更を行うために必要なの

expected_html = render_to_string('home.html', request=request) 

、テストは、Djangoの1.8で要求せずに渡します。

+0

1.9に実際に追加されたと思いますか?この本は1.8で正しいです... – hwjp

+1

'request'引数が1.8で追加されましたが、Django 1.9以降の行を更新するだけで済みます。このテストは、Django 1.8の '要求 'なしで行われます。 – Alasdair

関連する問題