pytest django:Mock settings.DEBUG

pytest django:Mock settings.DEBUG,django,pytest,pytest-django,Django,Pytest,Pytest Django,为了简化手动测试,我希望在显示登录页面时创建用户 class LalaLoginView(LoginView): def get(self, request, *args, **kwargs): self.create_users() return super().get(request, *args, **kwargs) @classmethod def create_users(cls): if not setting

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

class LalaLoginView(LoginView):
    def get(self, request, *args, **kwargs):
        self.create_users()
        return super().get(request, *args, **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()
中,调试为“True”


如何模拟
设置。使用pytest django调试

您需要使用
覆盖\u设置
装饰器:

@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()
但是在我的生产代码中,我从mysite导入了设置

在将其从django.conf导入设置更改为
后,pytest夹具“设置”起作用