Django中的单元测试:使用self.assertIn()在键/值对中查找文本

时间:2017-12-20 16:55:12

标签: python django unit-testing dictionary

我正在尝试使用self.assertIn()

为我的Django应用编写单元测试

这是我的单元测试:

    def test_user_get_apps_meta(self):
        myuser = User.objects.get(email='theemail@gmail.com')
        tagline = 'the text'
        self.assertIn(tagline, myuser.get_apps())

myuser.get_apps()的结果是一个词典列表。其中一个词典确实是我正在寻找的tagline文字:'the text'

但是我在运行测试时遇到错误:

    self.assertIn(tagline, myuser.get_apps())
    AssertionError: 'the text' not found in [{'logo_app_alt': 'the text', '...},{},{}]

我没有正确使用self.assertIn()吗?有没有办法检查某些文本是否是字典中键/值对的值?

1 个答案:

答案 0 :(得分:2)

如您所见,self.assertIn(tagline, taglines)仅在taglines包含实际字符串时才有效。如果它包含一个字符串作为值的字典,它将无法工作。

您可以使用列表推导从字典中提取值,并将其传递给self.assertIn

    expected_tagline = 'the text'
    taglines = [d['logo_app_alt'] for d in myuser.get_apps()]
    self.assertIn(expected_tagline, taglines)