2016-01-06 130 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

是的,没错。我知道了。我认为这本书有点误导。感谢百万阿拉斯代尔。 –