Python 3, Flask и unittest - лучший способ декодировать данные - PullRequest
0 голосов
/ 25 сентября 2019

Я не уверен, насколько это важно, но я нахожу это раздражающим, и я не знаю, только ли это, потому что это плохо для меня, или я неправильно понимаю вещи.

Я портирую приложение фляги на 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)

Есть ли лучший способ сделать это?Я обдумываю это?Или я что-то упустил?

...