Ответ 1
self.assertContains(result, "abcd")
Вы можете изменить его для работы с json.
Используйте self.assertContains
только для объектов HttpResponse
. Для других объектов используйте self.assertIn
.
В тестовом модуле python (на самом деле Django), что такое правильный оператор assert
, который скажет мне, если мой результат теста содержит строку по моему выбору?
т.е. что-то вроде self.assertContainsTheString(result, {"car": ["toyota","honda"]})
Я хочу убедиться, что мой result
содержит хотя бы объект json (или строку), который я указал в качестве второго аргумента выше, то есть {"car": ["toyota","honda"]}
self.assertContains(result, "abcd")
Вы можете изменить его для работы с json.
Используйте self.assertContains
только для объектов HttpResponse
. Для других объектов используйте self.assertIn
.
Чтобы утверждать, что строка является или не является подстрокой другого, вы должны использовать assertIn
и assertNotIn
:
# Passes
self.assertIn('bcd', 'abcde')
# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')
Они новы, поскольку Python 2.7 и Python 3.1
Вы можете написать утверждение о ожидаемой части строки в другой строке с помощью простого assertTrue + в ключевом слове python:
self.assertTrue("expected_part_of_string" in my_longer_string)
Создайте объект JSON с помощью json.dumps()
.
Затем сравните их с помощью assertEqual(result, your_json_dict)
import json
expected_dict = {"car":["toyota", "honda"]}
expected_dict_json = json.dumps(expected_dict)
self.assertEqual(result, expected_dict_json)
Как упоминалось Ed I, assertIn
, вероятно, является самым простым ответом на поиск одной строки в другой. Однако в этом вопросе говорится:
Я хочу убедиться, что мой
result
содержит хотя бы объект json (или строку), который я указал в качестве второго аргумента выше, то есть{"car": ["toyota","honda"]}
Поэтому я бы использовал несколько утверждений, чтобы полезные сообщения были получены при отказе - тесты должны быть поняты и сохранены в будущем, возможно, кем-то, кто не писал их изначально. Поэтому, предполагая, что мы находимся внутри django.test.TestCase
:
# Check that 'car' is a key in 'result'
self.assertIn('car', result)
# Compare the 'car' to what expected (assuming that order matters)
self.assertEqual(result['car'], ['toyota', 'honda'])
Что дает полезные сообщения следующим образом:
# If 'car' isn't in the result:
AssertionError: 'car' not found in {'context': ..., 'etc':... }
# If 'car' entry doesn't match:
AssertionError: Lists differ: ['toyota', 'honda'] != ['honda', 'volvo']
First differing element 0:
toyota
honda
- ['toyota', 'honda']
+ ['honda', 'volvo']
Я столкнулся с подобной проблемой, и я использовал атрибут rendered_content, поэтому я написал
assertTrue('string' in response.rendered_content)
и аналогичным образом
assertFalse('string' in response.rendered_content)
если я хочу проверить, что строка не отображается
Но он также работал на раннем предложенном методе,
AssertContains(response, 'html string as rendered')
Поэтому я бы сказал, что первый из них более прост. Надеюсь, это поможет.