From 3ac1bb8afea479c4376a93a1d12e50d59d3c353a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89loi=20Rivard?= Date: Tue, 16 Apr 2024 14:02:42 +0200 Subject: [PATCH] tests: cache the jinja bytecode between unit tests The jinja templates are compiled once per test session instead of once per test, using jinja cache system and a pytest fixture. https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.FileSystemBytecodeCache --- ihatemoney/tests/conftest.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ihatemoney/tests/conftest.py b/ihatemoney/tests/conftest.py index 35f99e27..ebeba15f 100644 --- a/ihatemoney/tests/conftest.py +++ b/ihatemoney/tests/conftest.py @@ -1,6 +1,7 @@ from unittest.mock import MagicMock from flask import Flask +from jinja2 import FileSystemBytecodeCache import pytest from ihatemoney.babel_utils import compile_catalogs @@ -13,11 +14,19 @@ def babel_catalogs(): compile_catalogs() +@pytest.fixture(scope="session") +def jinja_cache_directory(tmp_path_factory): + return tmp_path_factory.mktemp("cache") + + @pytest.fixture -def app(request: pytest.FixtureRequest): +def app(request: pytest.FixtureRequest, jinja_cache_directory): """Create the Flask app with database""" app = create_app(request.cls) + # Caches the jinja templates so they are compiled only once per test session + app.jinja_env.bytecode_cache = FileSystemBytecodeCache(jinja_cache_directory) + with app.app_context(): db.create_all() request.cls.app = app