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

Mar*_*oni 5 python django unit-testing

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

response = self.client.get('/user/login/')
Run Code Online (Sandbox Code Playgroud)

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

S.L*_*ott 7

小心.

此外,已设置的会话如何?是否有可能在测试中检查它们的值?

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 )
Run Code Online (Sandbox Code Playgroud)

也就是说,当没有登录时,一些(或所有)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 )
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


dze*_*zen 6

不确定,但请看一下https://docs.djangoproject.com/en/dev/topics/testing/tools/#testing-responses.

response.context 也许是一种检查你的价值观的方法.


Dan*_*man 6

Simon Willison的汤选是一种很好的方法来测试基于类似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)
Run Code Online (Sandbox Code Playgroud)

  • 通常,Django TestCases中已经可用的assertContains比引入外部HTML解析器更简单.http://docs.djangoproject.com/en/1.1/topics/testing/#django.test.TestCase.assertContains (3认同)