2014-09-19 1 views
4

В большинстве случаев я должен изменить/расширить методы сохранения/очистки формы по умолчанию. Однако я не уверен, как проверить пользовательские методы сохранения/очистки.Как протестировать пользовательские формы Django для очистки/сохранения?

Большую часть времени мои тесты, как:

response = self.client.post(reverse('example:view_name'), kwargs={'example, self.example'}) 
self.assertEqual(200, response.status_code) 
self.assertTemplateUsed('example.html', response) 

Использование self.client.post из класса TestCase Джанго, чтобы захватить ответ не достаточно, и, безусловно, не покрывает/тест на заказ и сохранить чистый.

Какова ваша практика тестирования форм? По-моему, то, что я сделал выше, неверно, поскольку это скорее интеграционный тест, который проходит через представление, чтобы добраться до формы.

+0

Что вы хотите проверить? Вы можете проверить, является ли результат тем, что вы ожидаете (т. Е. Он сохраняет правильные данные). – danielfranca

ответ

3

Создайте форму непосредственно в тесте, и позвоните по телефону is_valid method (clean): is_valid); проверьте правильность проверки. То же самое для метода save.

Например:

from django.contrib.auth.forms import (UserCreationForm, ...) 

... 

class UserCreationFormTest(TestCase): 

    def test_user_already_exists(self): 
     data = { 
      'username': 'testclient', 
      'password1': 'test123', 
      'password2': 'test123', 
     } 
     form = UserCreationForm(data) 
     self.assertFalse(form.is_valid()) 
     self.assertEqual(
      form["username"].errors, 
      [force_text(User._meta.get_field('username').error_messages['unique'])]) 

(Выше код пришел из исходного кода Джанго - django/contrib/auth/tests/test_forms.py).


BTW, параметры для assertTemplateUsed являются response, template_name, ..., не template_name, response, .....

Последняя строка в коде в этом вопросе должен быть:

self.assertTemplateUsed(response, 'example.html') 
+0

Спасибо! Таким образом, единственный путь - пройти через is_valid:/ –

+0

Вы хотите проверить какие-либо пользовательские проверки, но я бы не стал проверять обычную проверку. Если у вас есть собственный метод сохранения, вам также нужно будет это проверить: для этого потребуется использовать 'result = form.save()', а затем проверить, что происходит в вашем методе сохранения. –

Смежные вопросы