Как запустить проверку пустого значения в функциональном тесте Django? - PullRequest
0 голосов
/ 16 января 2019

Я новичок в Django и сейчас читаю книгу «Разработка через тестирование на Python». Однако, когда я хочу проверить проверку пустого значения, модульный тест в порядке, но функциональный тест не пройден.

Я сейчас использую Django 2.1, Python 3. Я старался изо всех сил, чтобы выяснить причину проблемы, но все еще не прошел функциональный тест

models.py

...
class Item(models.Model):
    text = models.TextField(default='')
    list = models.ForeignKey(List, default=None, on_delete=models.CASCADE)

views.py

...
def new_list(request):
    list_ = List.objects.create()
    item = Item.objects.create(text=request.POST['item_text'],list=list_)
    try:
        item.full_clean()
        item.save()
    except ValidationError:
        list_.delete()
        error = "You can't have an empty list item"
        return render(request, 'home.html', {"error": error})

    return redirect(list_)

test_views.py (Юнит-тест успешен)

...
def test_validation_errors_are_sent_back_to_home_page_template(self):
    response = self.client.post('/lists/new', data={'item_text':''})
    self.assertEqual(response.status_code, 200)
    self.assertTemplateUsed(response, 'home.html')
    expected_error = escape("You can't have an empty list item")
    self.assertContains(response, expected_error)

test_list_item_validation.py (Сбой функционального теста)

...
def test_cannot_add_empty_list_items(self):
    self.browser.get(self.live_server_url)
    self.browser.find_element_by_id('id_new_item').send_keys(Keys.ENTER)
    error = self.browser.find_element_by_css_selector('.has-error')
    self.assertEqual(error.text, "You can't have an empty list item")

base.html (все html-файлы начинаются с этого)

...
{% if error %}
    <div class="form-group has-error">
        <span class="help-block">{{ error }}</span>
    </div>
{% endif %}

Я ожидаю, что и модульный тест, и функциональный тест верны, но фактический результат - модульный тест пройден, но функциональный тест не пройден

1 Ответ

0 голосов
/ 16 января 2019

Отличная книга. Читай сам. Я считаю, что это та часть, которую вам не хватает:

def test_cannot_add_empty_list_items(self):
    # Edith goes to the home page and accidentally tries to submit
    # an empty list item. She hits Enter on the empty input box
    self.browser.get(self.live_server_url)
    self.get_item_input_box().send_keys(Keys.ENTER)

    '''
    If you keep reading a little farther, it should tell you that modern browsers
    will not submit forms when fields that are 'required' left are blank.
    '''
    # The browser intercepts the request, and does not load the
    # list page
    self.wait_for(lambda: self.browser.find_elements_by_css_selector(
        '#id_text:invalid'  
    ))

Если вы продолжаете читать немного дальше, вам следует сказать, что «современные браузеры не будут отправлять forms, когда поля, которые required оставлены пустыми. Это должно дать вам поправку кода выше.

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