Тестирование просмотров страниц трясогузки с помощью client.get

Я хочу проверить функциональность представлений для страницы трясогузки, которая использует Микс маршрутизации страниц. Я обнаружил, что трясогузка включает некоторые функции тестирования, но Я пытаюсь проверить содержимое на разных URL-адресах. Хотя тестовые функции трясогузки работают, тестирование с использованием self.client.get не работает — я получаю ответ 404. Я пробую следующий тест:

def test_subpage(self):
    response = self.client.get(
        self.page.full_url + self.page.reverse_subpage('subpage')
    )
    self.assertEqual(response.status_code, 200,
                     'Request the open positions page')

Я предполагаю, что ошибка заключается в том, как создается страница. Я использовал несколько способов, но не могу найти тот, для которого это работает. Самый интуитивно понятный способ создания страницы, который я нашел, заключается в следующем:

def setUp(self):
    self.login()
    parent = Page.get_root_nodes()[0] # Home

    self.assertCanCreate(parent, MyPage, {
        'title': 'Title!',
        'title_sv': 'Title2!',
        'slug': 'test',
        'published': datetime.datetime.now(),
    })

    self.page = MyPage.objects.get(slug='apply')

Подстраницы были протестированы вручную и, похоже, работают.


person Dekker1    schedule 07.03.2017    source источник


Ответы (1)


Самый простой способ создать страницу в тестовом коде (или любом другом коде...):

parent = Page.objects.get(url_path='/home/')
page = MyPage(title='Title!', slug='test', body='...')
parent.add_child(instance=page)

Обратите внимание, что Page.get_root_nodes()[0] не вернет домашнюю страницу вашего сайта — корень дерева является нередактируемым заполнителем, а домашние страницы сайта обычно являются его дочерними элементами. Вы можете создать дополнительные дочерние элементы корня, но если вы не предоставите им соответствующую запись сайта, они не будут доступны ни по какому URL-адресу (вероятно, поэтому вы получаете 404 в своем тесте). .

person gasman    schedule 07.03.2017
comment
хм, на самом деле это не решает проблему self.client.get получения 404 для любого URL-адреса, которого нет в urls.py. Например, если страница имеет @route определение, которое может привести к ответам 400 или 302 в зависимости от правильности маршрута, это решение не позволит вам проверить, что response.status_code является тем, чем оно должно быть. - person Mike 'Pomax' Kamermans; 07.11.2019