【问题标题】:pytest-django: Mock settings.DEBUGpytest-django:模拟 settings.DEBUG
【发布时间】:2021-03-11 08:40:43
【问题描述】:

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

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() DEBUG 中为“真”。

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

【问题讨论】:

    标签: django pytest pytest-django


    【解决方案1】:

    你需要使用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()
    

    【讨论】:

      【解决方案2】:

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

      此代码确实有效:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-27
        • 1970-01-01
        相关资源
        最近更新 更多