python - Django:在测试模式下以不同方式定义表单

标签 python django testing django-forms captcha

我有一个自定义验证码字段。我想在测试期间从表单中删除该字段。

我最初的想法是在一个单独的设置文件中有一个 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 设置。这看起来可以接受吗?我有理由不这样做吗?

最佳答案

您可以在单元测试类的构造函数中禁用验证码。像这样:

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

或者,例如,您可以在此构造函数中禁用验证码字段验证。

关于python - Django:在测试模式下以不同方式定义表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4292398/

相关文章:

c# - 如何在一个解决方案中更好地组织多个项目及其各自的单元/集成测试?

eclipse - Eclipse Jubula教程

Python图递归

python - 如何检测当前聚焦的应用程序?

python - 用于添加索引的 SQLAlchemy/Alembic 原始 SQL

django - setugid() 在 apache 和 django 中使用 matplotlib 时出错

python - Django 1.4 和时区

python - 我无法保存动画

python - 如何检查给定的日期时间对象是否为 "between"两个日期时间?

http - 用于测试 HTTP 模块的慢速网站/服务器