Я не уверен, насколько это важно, но я нахожу это раздражающим, и я не знаю, только ли это, потому что это плохо для меня, или я неправильно понимаю вещи.
Я портирую приложение фляги на Python 3, и в Python 2 у меня были модульные тесты, которые выглядели так:
project1=Project(shortname="newproj1")
db.session.add(project1)
db.session.commit()
response1 = self.app.test_client().get('/projects/')
self.assertEqual('200 OK', response1.status)
self.assertIn('newproj1', response1.data)
В Python 3 это не удается, потому что ответОбъект из Flask - это строка байтов, а искомая вещь - это строка в юникоде.
Есть несколько способов исправить это.Я не знаю, является ли один из них лучше или лучше, или есть ли другой способ сделать то, о чем я не думаю.На каком-то уровне это раздражает меня, потому что любой способ, которым я придумываю, кажется менее чистым, чем Python 2.
Вариант 1 - Добавить вызов декодирования:
self.assertIn('newproj1', response1.data.decode())
Вариант 2 - Изменить ответobject
response1 = self.app.test_client().get('/projects/', as_text=True)
...
self.assertIn('newproj1', response1.data)
Вариант 3. Объявление объявляемых данных для объекта байта
self.assertIn(b'newproj1', response1.data)
Есть ли лучший способ сделать это?Я обдумываю это?Или я что-то упустил?