Общая фабула истории: идёт жестокий рефакторинг проекта. Одно приложение почти заново с нуля переписывается, только тесты взяты с прежней версии. Используется стандартный django.test.TestCase
.
Есть форма. При незаполненном поле должна быть ошибка. Тест:
def test_add_quota_requires_reason(self):
self.login_as_moderator()
response = self.client.post(self.resume_action_url, {
'action': 'quota',
'quota_quantity': random_int(1),
'quota_reason': ''
})
self.assertFormError(response, 'form', 'quota_reason', _('quota reason is required'))
Самая ерунда в том, что функционал работает, но тест падает. Лезу разбираться и нахожу, что используемый мною в формах crispy-forms неким образом подменяет словарь, имеющийся в context[form].errors
на его строковое представление. В то время как метод assertFormError
рассчитывает именно словарь найти, а не найдя его, выдаёт совершенно нелепую ошибку.
И вот я теперь в непонятках. Причина неправильного поведения приблизительно локализована. Очевидно, что упираюсь в особенности используемых решений, и своим кодом я тут мало что сделаю. А что дальше делать — в некоторых непонятках. Отказываться от crispy-forms уже не очень хочется ибо в целом удобная штука, а минусы легко обходятся. Отказаться от части тестов — очевидно неправильно, да и как-то неуютно без них. Задействовать более иное решение для тестов — это уже вариант интереснее. К тому же именно по части форм явно есть куда удобнее. Но тут бы нужен совет более опытных: в какую сторону посмотреть стоит?
А может я и вовсе всё делаю неправильно? Серьёзно, нужна любая помощь, любой совет.