有没有办法从响应中测试html:
response = self.client.get('/user/login/')
我想要输入ID和其他属性的详细检查。此外,已设置的会话如何?是否可以在测试中检查它们的值?
答案 0 :(得分:6)
不确定,但请查看https://docs.djangoproject.com/en/dev/topics/testing/tools/#testing-responses。
response.context
可能是一种检查你的价值观的方法。
答案 1 :(得分:6)
Simon Willison的soup-select是一种基于类似jQuery的CSS选择器测试HTML响应内容的好方法。因此,例如,要检查您的网页是否包含ID为my_input_id
的输入:
from BeautifulSoup import BeautifulSoup as Soup
from soupselect import select
response = self.client.get('/user/login/')
soup = Soup(response.content)
self.assertEquals(len(select(soup, 'input#my_input_id')), 1)
答案 2 :(得分:6)
小心。
此外,已设置的会话如何?是否可以在测试中检查它们的值?
TDD是关于外部可见行为的。要查看用户是否有会话,您将提供仅在用户登录并具有会话时才起作用的链接。
通常的练习如下所示。
class When_NoLogin( TestCase ):
def test_should_not_get_some_resource( self ):
response= self.client.get( "/path/that/requires/login" )
self.assertEquals( 301, response.status_code )
也就是说,当没有登录时,一些(或所有)URI会重定向到登录页面。
class When_Login( TestCase ):
def setUp( self ):
self.client.login( username='this', password='that' )
def test_should_get_some_resource( self ):
response= self.client.get( "/path/that/requires/login" )
self.assertContains( response, '<input attr="this"', status_code=200 )
self.assertContains( response, '<tr class="that"', count=5 )
也就是说,登录时,一些(或所有)URI按预期工作。
此外,URI响应包含您需要的标记。
您不测试Django以查看它是否创建了会话。 Django已经为此进行了单元测试。您测试应用程序的外部可见行为 - 它是否像会话一样?页面是否正确可见?它们是否根据会话特定信息进行了正确定制?