微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pytest-django:模拟 settings.DEBUG

如何解决pytest-django:模拟 settings.DEBUG

为了简化手动测试,我想在显示登录页面时创建用户

class LalaLoginView(LoginView):
    def get(self,request,*args,**kwargs):
        self.create_users()
        return super().get(request,**kwargs)

    @classmethod
    def create_users(cls):
        if not settings.DEBUG:
            return
        admin = User.objects.update_or_create(username='admin',defaults=dict(
            is_superuser=True,is_staff=True))[0]
        admin.set_password('admin')
        admin.save()

我的测试:

@pytest.mark.django_db
def test_create_users_prod(settings):
    settings.DEBUG=False
    LalaLoginView.create_users()
    assert not User.objects.all().exists()

但是对 settings.DEBUG 的嘲讽不起作用。在 create_users() 中,DEBUG 为“真”。

如何使用 pytest-django 模拟 settings.DEBUG

解决方法

您需要使用 override_settings 装饰器:

@override_settings(DEBUG=False)
@pytest.mark.django_db
def test_create_users_prod(settings):
    LalaLoginView.create_users()
    assert not User.objects.all().exists()
,

问题出在键盘和椅子之间:-)

此代码确实有效:

@pytest.mark.django_db
def test_create_users_prod(settings):
    settings.DEBUG=False
    LalaLoginView.create_users()
    assert not User.objects.all().exists()

但在我的生产代码中,我从 settings 导入了 mysite

将其更改为 from django.conf import settings 后,pytest 夹具“设置”起作用了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。