2016-01-06 131 views
1

我下面的 「在Python測試驅動開發」 一書,並具備以下功能:Django的單元測試:assertEqual便()失敗

tests.py:

def testHomePageCanSaveAPostRequest(self): 
    request = HttpRequest() 
    request.method = 'POST' 
    request.POST['itemText'] = 'A new list item' 

    response = homePage(request) 
    if response: 
     response = response.content.decode('UTF-8') 

    self.assertIn('A new list item', response) 

    expectedHTML = render(request, 'lists/home.html', {'itemText':'A new list item'}) 
    if expectedHTML: 
     expectedHTML = expectedHTML.content.decode('UTF-8') 

    print(response) 
    print(expectedHTML) 
    if response==expectedHTML: 
     print('Same') 

    self.assertIn('A new list item', expectedHTML) 

    self.assertEqual(response, expectedHTML) 

views.py

def homePage(request): 
    print(request.POST.get('itemText')) 
    return render(request, 'lists/home.html', {'itemText':request.POST.get('itemText')}) 

home.html的:

... 
<form method=POST> 
    <input id=newItem name=itemText placeholder="Enter a to-do item"> 
</form> 
<table id=listTable> 
    <tr><td>{{itemText}}</td></tr> 
</table> 
... 

assertIn(..., response)assertIn(..., expectedHTML)都成功,這意味着responseexpectedHTML都有'新的列表項'。

我也打印出responseexpectedHMTL,他們看起來完全一樣。比較也打印出「Same」,表明它們是相同的。

然而,assertEqual失敗,並通過線比較下面的行:

... 
    <table id=listTable> 
- <tr><td>None</td></tr> 
?   ---- 
+ <tr><td></td></tr> 
    </table> 
... 

一個是無,而另一個是空的。?我做錯了什麼?

編輯: 整個測試輸出列在下面:

Creating test database for alias 'default'... 
A new list item 
<!doctype html> 
<html> 
<head> 
<title>To do list</title> 
<meta charset=utf-8> 
</head> 
<body> 
<h1>Your to do list</h1> 
<form method=POST> 
    <input id=newItem name=itemText placeholder="Enter a to-do item"> 
</form> 
<table id=listTable> 
    <tr><td>A new list item</td></tr> 
</table> 
</body> 
</html> 
<!doctype html> 
<html> 
<head> 
<title>To do list</title> 
<meta charset=utf-8> 
</head> 
<body> 
<h1>Your to do list</h1> 
<form method=POST> 
    <input id=newItem name=itemText placeholder="Enter a to-do item"> 
</form> 
<table id=listTable> 
    <tr><td>A new list item</td></tr> 
</table> 
</body> 
</html> 
Same 
.None 
F. 
====================================================================== 
FAIL: testHomePageReturnsCorrectHTML (lists.tests.HomePageTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/yltang/course/TDD/lecture/python/webapps/git/superlists/superlists/lists/tests.py", line 27, in testHomePageReturnsCorrectHTML 
    self.assertEqual(response, expectedHTML) 
AssertionError: '<!do[231 chars]stTable>\n <tr><td>None</td></tr>\n</table>\n</body>\n</html>' != '<!do[231 chars]stTable>\n <tr><td></td></tr>\n</table>\n</body>\n</html>' 
    <!doctype html> 
    <html> 
    <head> 
    <title>To do list</title> 
    <meta charset=utf-8> 
    </head> 
    <body> 
    <h1>Your to do list</h1> 
    <form method=POST> 
    <input id=newItem name=itemText placeholder="Enter a to-do item"> 
    </form> 
    <table id=listTable> 
- <tr><td>None</td></tr> 
?   ---- 
+ <tr><td></td></tr> 
    </table> 
    </body> 
    </html> 

---------------------------------------------------------------------- 
Ran 3 tests in 0.017s 

FAILED (failures=1) 
Destroying test database for alias 'default'... 
+0

該消息太長。 –

+0

問題已更新。 –

回答

1

您已經添加了打印語句不同的測試。打印語句在testHomePageCanSaveAPostRequest,正在通過。

失敗的測試是testHomePageReturnsCorrectHTML,你沒有包括在你的問題中。

+0

是的,沒錯。我知道了。我認爲這本書有點誤導。感謝百萬阿拉斯代爾。 –