Ошибка при доступе к конфигурации Flask во время тестирования - PullRequest
0 голосов
/ 29 мая 2018

При написании тестов для моего приложения Flask я столкнулся с проблемой при попытке установить параметры конфигурации Flask.

Обычно я делаю это так:

import unittest

from factory import create_app


class ConfigTests(unittest.TestCase):

    def setUp(self):
        app = create_app('flask_test.cfg')
        app.testing = True
        self.app = app.test_client()

    def test_app_is_development(self):
        self.assertTrue(self.app.config['SECRET_KEY'] is 'secret_key')
        self.assertTrue(self.app.config['DEBUG'] is True)

Это приводило кошибка

AttributeError: объект 'FlaskClient' не имеет атрибута 'config'

Только из отладки я обнаружил, что вместо этого не было атрибута "config", мне пришлось идти self.app.application.config чтобы заставить его работать.

import unittest

from factory import create_app


class ConfigTests(unittest.TestCase):

    def setUp(self):
        app = create_app('flask_test.cfg')
        app.testing = True
        self.app = app.test_client()

    def test_app_is_development(self):
        self.assertTrue(self.app.application.config['SECRET_KEY'] is 'secret_key')
        self.assertTrue(self.app.application.config['DEBUG'] is True)

Я что-то делаю, Flask изменил это в обновлении или есть лучший способ сделать это?

РЕДАКТИРОВАТЬ: Неправильно размещен кодв верхнем блоке теперь правильно

1 Ответ

0 голосов
/ 29 мая 2018

Производственный app имеет тип flask.app.Flask, в то время как тот, который вы используете в тестировании, - flask.testing.FlaskClient, то есть 2 разных объекта.То, как вы получаете доступ к конфигурации с помощью self.app.application.config, является правильным и единственным способом, поскольку я верю, когда вы устанавливаете self.app = app.test_client(), это возвращает экземпляр FlaskClient.

взгляните на текущий: FlaskClient и test_client

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...