Tôi đang viết ứng dụng Django
đầu tiên của tôi bằng cách làm theo cùng với cuốn sách này:Render_to_string và response.content.decode() không phù hợp với
Trong cuốn sách có một bài kiểm tra đó là xác định rằng các html đang được trả lại như nó được cho là. Đây là thử nghiệm:
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)
thử nghiệm của tôi là không vào kiểm tra assertEqual
vì tôi đã thêm một csrf token
trong HTML của tôi bằng cách sử dụng Django Template Language
. Dưới đây là trang HTML của tôi trông như thế nào:
<!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>
Xác nhận của tôi không thành công do phương thức render_to_string
không bao gồm mã thông báo. Đây là những gì hai print
báo cáo của tôi bao gồm in thử nghiệm của tôi ra:
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.
Anh ấy không có vấn đề này trong cuốn sách (ông đang sử dụng 1.8
), vì vậy tôi đã tự hỏi nếu hành vi phương pháp đã thay đổi, hoặc làm thế nào Tôi sẽ viết bài kiểm tra này để vượt qua.
Cuốn sách Phát triển thử nghiệm được viết ban đầu cho Django 1.7. Có vẻ như phần này có thể đã bị bỏ qua khi cuốn sách được nâng cấp lên Django 1.8. – Alasdair
tác giả ở đây. nó thực sự chính xác cho 1,8, lỗi xảy ra khi bạn chuyển sang 1.9. các hướng dẫn cài đặt trong cuốn sách làm rõ ràng bạn phải dính vào 1,8, mumble grumble ... – hwjp
@hwjp Lỗi lầm của tôi, kiểm tra không vượt qua trong Django 1.8, hướng dẫn cài đặt làm rõ ràng để dính vào 1,8. Tôi đã sử dụng Django 1.9 khi tôi nghĩ rằng tôi đã thử nghiệm 1.8. Rất tiếc! – Alasdair