针对登录用户或匿名用户的django单元测试



我有一个服务,它实际上会返回一个字典,这取决于用户是登录的、匿名的还是通过电子邮件匿名的。我在django-rest api中使用了该服务,并将所有逻辑放在api视图中。现在我想为这个api创建一个单元测试,并想测试以下不同的情况,即

  1. 如果用户已登录
  2. 如果用户是匿名的,没有电子邮件
  3. 如果用户是匿名的电子邮件

对于1,如果用户登录,我们将有一个不同的值,对于2,如果用户是匿名的,我们将有另一个不同的值,对于3,如果用户是匿名的,但提供了一封电子邮件,我们将有另一个不同的值

现在在django单元测试中,我如何检查这种不同的情况?

为了更方便,我分享了我实际尝试过的东西(实际上并不完美)

def test_requirement_header_create_api(self, mocked_get_or_save_anonymous_user_email):
    mocked_get_or_save_anonymous_user_email.return_value = dict()
    client = APIClient(enforce_csrf_checks=True)
    logged_in = client.login(username=self.user.email, password=self.user.password)
    if logged_in:
        self.data = {
            "user_id": self.user_id,
            "description": self.description,
        }
        expected_return = {
            "user_id": self.user_id,
            "description": self.description,
        }
    elif self.anonymous_user:
        self.data = {
            "email": self.anonymous_user.email,
            "anonymous_user_email_id": self.anonymous_user.id,
            "description": self.description,
        }
        expected_return = {
            "id": 2,
            "status": self.requirement_status,
            "description": self.description,
        }
    else:
        self.data = {
            "description": self.description,
            "session": self.session,
        }
        expected_return = {
            "description": self.description,
            "session": self.session,
        }
    response = client.post('/api/requirement-header/', self.data, format='json')
    self.assertDictEqual(response.data, expected_return)

我只想知道**如何在django单元测试中检查这种情况

if user is logged in then test something.....
elif user is anonymous then test some another thing..... 

事实上,请不要为我的共享代码而烦恼,我需要知道的是how to check my above written situations,我已经共享了我的代码,让你知道我到目前为止实际尝试了什么来检查这些情况。但我很确定,这不是正确的方式,但很抱歉,我找不到正确的方式。可能是因为我没有在djano中编写api测试,事实上我是第一次编写。

要检查匿名用户,可以使用(如文档中所示)

self.user.is_anonymous()

要检查登录用户,您可以使用(再次,取自文档

self.user.is_authenticated()

也就是说,这些应该是单独的单元测试。单元测试应该很简单,只测试一件事。在一个单元测试中测试这些不同的情况是一种反模式。

最新更新