おおよそ次の構成を持つ Flask アプリケーションの単体テストを作成しています。
/myapplication
runner.py
/myapplication
__init__.py
/special
__init__.py
views.py
models.py
/static
/templates
index.html
/special
index_special.html
/tests
__init__.py
/special
__init__.py
test_special.py
special
特に、モジュールが期待どおりに動作することをテストしたいと考えています。
以下を定義しました。
で
special/views.py
:mod = Blueprint('special', __name__, template_folder="templates") @mod.route('/standard') def info(): return render_template('special/index_special.html')
で
myapplication/__init__.py
:app = Flask(__name__) def register_blueprints(app): from special.views import mod as special_blueprint app.register_blueprint(special_blueprint, url_prefix='/special') register_blueprints(app)
の
myapplication/tests/test_special.py
class TestSpecial: @classmethod def create_app(cls): app = Flask(__name__) register_blueprints(app) return app @classmethod def setup_class(cls): cls.app = cls.create_app() cls.client = cls.app.test_client() def test_connect(self): r = self.client.get('/standard') assert r.status_code == 200
アプリケーション自体は正常に動作しますが、test_connect
単体テストはTemplateNotFound: special/index_special.html
例外で失敗します。
対応するテンプレートの場所をテストに伝えるにはどうすればよいですか? Flask-testingを使用してテンプレートのレンダリングをバイパスすることは、実際にはオプションではありません...