django:单元测试来自响应和会话的html标签

时间:2010-05-17 13:38:16

标签: python django unit-testing

有没有办法从响应中测试html:

response = self.client.get('/user/login/')

我想要输入ID和其他属性的详细检查。此外,已设置的会话如何?是否可以在测试中检查它们的值?

3 个答案:

答案 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 )

https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.SimpleTestCase.assertContains

也就是说,登录时,一些(或所有)URI按预期工作。

此外,URI响应包含您需要的标记。

您不测试Django以查看它是否创建了会话。 Django已经为此进行了单元测试。您测试应用程序的外部可见行为 - 它是否像会话一样?页面是否正确可见?它们是否根据会话特定信息进行了正确定制?