Django: определять форму по-разному в режиме тестирования - PullRequest
2 голосов
/ 27 ноября 2010

У меня есть настроенное поле капчи. Я хочу удалить это поле из формы при отображении во время тестов.

Первоначально я думал о том, чтобы иметь переменную TESTING в отдельном файле настроек, который будет предоставлен в качестве аргумента команды запуска теста. Тогда я мог бы что-то вроде:

class CaptchaForm(forms.Form):
    notify_email = forms.EmailField(required=False)
    if not settings.TESTING:
        recaptcha = CaptchaField()

Я считаю, что это должно сработать.

Может быть, еще лучший подход. Есть идеи?

Обновление

Поработав с предложенными ниже советами, я добавил это в папку тестовой папки __init__.py:

    from project.app.forms import CaptchaField
    CaptchaField.clean = lambda x, y: y

Это сработало --- без создания общей настройки TESTING. Это выглядит приемлемо? Есть ли причина, по которой я не должен этого делать?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2010

Вы можете отключить капчу в конструкторе класса юнит-тестирования.Например:

class MyTest(unittest.TestCase):
    def __init__(self, *args, **kwargs):
         super(MyTest, self).__init__(*args, **kwargs)
         settings.TESTING = True

Или вы можете отключить проверку поля капчи в этом конструкторе, например.

0 голосов
/ 27 ноября 2010

Полагаю, CaptchaField - ваш собственный класс. Тогда вы можете изменить метод проверки:

from django.core.exceptions import ValidationError

class CaptchaField(Field):
    # ...

    def validate(self, value, model_instance):
        if settings.TESTING:
            return
        else:
            # Do CAPTCHA checking, leading to either
            # raise ValidationError  or
            # return

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

...