首页 > 解决方案 > 在不访问数据库的情况下使用“登录用户”测试视图

问题描述

我已经编写了一些任意代码来测试一个有和没有登录用户的视图类。但是,在这样做的同时,我必须创建一个访问数据库的用户。为了遵循 TDD 单元测试的良好实践,我会尽量避免访问数据库,但我不知道如何

我曾短暂尝试修补不同的模块,但我还没有弄清楚如何或修补什么

这是我今天使用的解决方案:


@pytest.mark.django_db
class TestTreaterProfile:
    """
    get with anonymous
    get with logged-in user
    """
    [...]

    def test_get_with_logged_in_user(self):
        status_code = [200]
        view_class = ClientProfile

        client = Client()
        user = User.objects.create_user("user", "my@email.com", "password")
        client.force_login(user)

        # create request and retrieve response
        request = RequestFactory().get("/")
        request.user = user
        response = view_class.as_view()(request, *[], **{})

        assert response.status_code in status_code, "Should have status_code 200 - OK"

该代码有效,我只想对其进行修改,使其不必访问数据库。

在此先感谢您的帮助!

标签: djangopython-3.xunit-testing

解决方案


您可以在测试的setUp方法(链接)中创建用户,这样您就不会污染您的实际测试方法(因为这是我假设您试图避免的)。仅供参考:这仍然会影响数据库。

class TestTreaterProfile:
    ...
    def setUp(self):
        self.user = User.objects.create_user("user", "my@email.com", "password")
    ...
    def test_get_with_logged_in_user(self):
        ...
        request.user = self.user
        ...


推荐阅读