Проверка Django: проверьте начальное значение поля формы
У меня есть представление, которое должно устанавливать начальное значение для поля формы на основе значения GET. Я хочу проверить это. В настоящее время я использую тестовый клиент Django, но я открыт для просмотра других инструментов.
Изменить
Извините, я не упомянул, что я хорошо знаю метод assertContains, но я надеялся, что есть лучший способ, кроме поиска в HTML для input
и атрибут value
.
Ответы
Ответ 1
Ненавижу отвечать на мой собственный вопрос (например, в третий раз, когда я это сделал), но после насмешки вокруг тестового клиента я нашел лучший способ:
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')
Кто-нибудь видит в этом что-то не так? Я оставлю это некоторое время, чтобы понять, что думают люди.
Ответ 2
Принятое решение проверяет значение 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)
Ответ 3
Значение будет вложено в html как < входное value = 'whatever'/ > . Вы можете искать эту строку любым удобным вам инструментом.
response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
Ответ 4
Я думаю, что эта функция поставляется с 1.3, но, возможно, она появилась раньше. Я немного изменил пример на странице, чтобы работать с вашими требованиями, но это непроверенный код, и я принял несколько вещей, таких как параметр формы контекста ответа. Измените, если применимо. В этом ответе указывается запрос factory.
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)