Переопределение flask.g в модульном тесте колбы

Я пытаюсь написать несколько модульных тестов для своего флеш-приложения, которое использует OpenID для аутентификации. Поскольку кажется, что нет возможности войти в тестовый клиент через OpenID (я задал этот вопрос, но он не получил никаких ответов: Flask OpenID unittest), я думал переопределить g.user в моем тесте, поэтому я попробовал фрагмент кода из http://flask.pocoo.org/docs/testing/#faking-resources-and-context, и он работает должным образом.

К сожалению, при использовании flask-login g.user переопределяется в оболочке before_request, которая устанавливает

g.user = current_user

current_user анонимен, поэтому мой тестовый пример не работает. Одно из исправлений - выполнять код оболочки before_request только в тестовом режиме, но кажется неуместным, что вам нужно добавить логику, специфичную для тестирования, в производственный код. Я тоже пробовал возиться с контекстом запроса, но в конечном итоге g.user все равно переопределяется. Есть идеи по поводу чистого способа решить эту проблему?


person rith87    schedule 19.04.2014    source источник


Ответы (1)


На основании этого другого вопроса в модульном тесте Flask, как я могу имитировать объекты в глобальном объекте запроса` g`? у меня сработало следующее:

В своем приложении я преобразовал логику входа, содержащуюся в before_request, в отдельную функцию. Затем я исправил эту функцию в своих тестах, чтобы она возвращала конкретного пользователя, которого я хочу использовать для ряда тестов. Before_request все еще запускается с тестами, но, исправив функцию, которую он вызывает, теперь я могу избежать фактического процесса входа в систему.

Я не уверен, что это самый чистый способ, но я думаю, что он лучше, чем добавление логики только для тестирования к вашему before_request; это просто рефакторинг.

person pandorabob    schedule 14.11.2018