我正在使用内置的测试工具为我的Django应用程序编写测试。现在,我正在尝试为显示用户关注者列表的页面编写测试。当用户没有关注者时,该页面将显示从字符串列表中随机选择的消息。举个例子:
NO_FOLLOWERS_MESSAGES = [
"You don't have any followers.",
"Sargent Dan, you ain't got no followers!"
]
所以现在我想编写一个测试,断言响应包含其中一个字符串。如果我只使用一个字符串,我可以使用self.assertContains(request, "You don't have any followers.")
,但我仍然坚持如何编写具有多种可能结果的测试。任何帮助将不胜感激。
答案 0 :(得分:1)
这样的事情会起作用吗?
found_quip = [quip in response.content for quip in NO_FOLLOWERS_MESSAGES]
self.assertTrue(any(found_quip))
答案 1 :(得分:1)
试试这个:
if not any([x in response.content for x in NO_FOLLOWERS_MESSAGES]):
raise AssertionError("Did not match any of the messages in the request")
关于any()
:https://docs.python.org/2/library/functions.html#any
答案 2 :(得分:1)
Internally assertContains()
,使用_assert_contains()
因此,如果您想要保留与assertContains()
完全相同的行为,并且假设_assert_contains()
的{{3}}不是微不足道的,那么您可以从源头获取灵感上面的代码并根据您的需求进行调整
def assertContainsAny(self, response, texts, status_code=200,
msg_prefix='', html=False):
total_count = 0
for text in texts:
text_repr, real_count, msg_prefix = self._assert_contains(response, text, status_code, msg_prefix, html)
total_count += real_count
self.assertTrue(total_count != 0, "None of the text options were found in the response")
通过将参数texts
作为列表传递来使用,例如
self.assertContainsAny(response, NO_FOLLOWERS_MESSAGES)