Тестирование Django: проверка начального значения поля формы - PullRequest
17 голосов
/ 21 ноября 2010

У меня есть представление, которое должно устанавливать начальное значение для поля формы на основе значения GET. Я хочу проверить это. В настоящее время я использую тестовый клиент Django , но я открыт для просмотра других инструментов.

Редактировать

Извините, я не упомянул, что мне хорошо известен метод assertContains , но я надеялся, что есть и другой способ, кроме поиска в HTML тега input и атрибута value .

Ответы [ 5 ]

24 голосов
/ 22 ноября 2010

Ненавижу отвечать на мой собственный вопрос (как в третий раз, когда я это делал), но после насмешек с тестовым клиентом я нашел лучший способ:

def test_creating_stop(self):
    c = self.client

    # Check that name is pre-filled
    response = c.get('%s?name=abcd' % reverse('add_new_stop'))
    self.assertEqual(response.context['form'].initial['name'], 'abcd')

Кто-нибудь что-нибудь видитне так с этим?Я оставлю это на некоторое время, чтобы посмотреть, что думают люди.

7 голосов
/ 14 апреля 2015

Принятое решение проверяет initial['...'] значение в форме, но вы также можете проверить фактическое значение в поле. Псевдокод ниже.

Это полезно, если вы хотите проверить значение по умолчанию, полученное непосредственно из модели (форма form.initial не установлена), и убедиться, что initial['...'] является фактическим значением.

def test_some_default_value(self):
        response = self.client.get('/signup/')
        self.assertEquals(response.context['form']['plan'].value(), my_value)

def test_some_default_value_2(self):
        some_different_conditions...
        response = self.client.get('/signup/')
        self.assertEquals(response.context['form']['plan'].value(), a_different_value)
2 голосов
/ 21 ноября 2010

Значение будет встроено в HTML как,Вы можете искать эту строку с любым инструментом, который вы предпочитаете.

response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
0 голосов
/ 12 апреля 2018

Если вы строго проверяете начальное значение поля формы, другой вариант проверяет вашу форму:

forms.py

from django import forms

class MyForm(forms.Form):
    title = forms.CharField(initial='My Default Title')

test_forms.py

from django.test import TestCase
from .forms import MyForm

class MyFormTests(TestCase):
    def test_myform_initial_value(self):
        form = MyForm()
        self.assertEqual(form['title'].initial, 'My Default Title')
0 голосов
/ 21 ноября 2010

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

http://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.RequestFactory

from django.utils import unittest
from django.test.client import RequestFactory

class SimpleTest(unittest.TestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()

    def test_details(self):
        get_param = 'some_value'
        # Create an instance of a GET request.
        request = self.factory.get('/customer/details/?param={0}'.format(get_param))

        # Test my_view() as if it were deployed at /customer/details
        response = my_view(request)

        # test 1
        form = response.form
        idx = form.as_p().find(get_param)
        self.assertNotEqual(idx, -1)            
        #or.. test 2
        self.assertContains(response, get_param)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...