我有一个服务,它实际上返回一个字典,具体取决于用户是否登录、匿名或通过电子邮件匿名。我在 django Rest api 中使用了该服务,并将所有逻辑放在 api View 中。 现在我想为此 api 创建一个单元测试,并想测试以下不同的情况,即
- 如果用户已登录
- 如果用户是匿名且没有电子邮件
- 如果用户通过电子邮件匿名
即,
对于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.....
事实上,请不要关心我的共享代码,我需要知道的是如何检查我上面写的情况
,我已经共享了我的代码,让你知道我有什么到目前为止实际上已经尝试过检查这些情况。但我很确定,这不是正确的方法,但很抱歉我找不到正确的方法。事实上,这可能是我缺乏在 djano 中编写 api 测试的原因我是第一次写文章。
最佳答案
要检查匿名用户,您可以使用(如 the docs 中所示)
self.user.is_anonymous()
要检查登录用户,您可以使用(同样,taken from the docs
self.user.is_authenticated()
话虽如此,这些应该是单独的单元测试。单元测试应该简单,只测试一件事。在一个单元测试中测试这些不同的情况是一种反模式。
关于python - 登录或匿名用户的 django 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37112548/