Django: модульное тестирование HTML-тегов из ответов и сессий - PullRequest
4 голосов
/ 17 мая 2010

Есть ли способ проверить html из ответа:

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

Мне нужна подробная проверка, например, идентификаторы ввода и другие атрибуты. Кроме того, как насчет сеансов, которые были установлены? можно ли проверить их значения в тесте?

Ответы [ 3 ]

6 голосов
/ 17 мая 2010

Simon Willison's soup-select - хороший способ проверить содержимое ответа HTML, основанного на jQuery-подобных CSS-селекторах Так, например, чтобы убедиться, что на вашей странице есть ввод с идентификатором 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)
6 голосов
/ 17 мая 2010

Осторожно.

Кроме того, как насчет сеансов, которые были установлены?можно ли проверить их значения в тесте?

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, чтобы увидеть, создает ли он сеанс.Джанго уже имеет модульные тесты для этого.Вы проверяете внешне видимое поведение вашего приложения - оно ведет себя так, как будто есть сеанс?Страницы правильно видны?Правильно ли они настроены на информацию о сеансе?

6 голосов
/ 17 мая 2010

Не уверен, но взгляните на https://docs.djangoproject.com/en/dev/topics/testing/tools/#testing-responses.

response.context это, возможно, способ проверить ваши значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...