Pytest database not creating tables

This page summarizes the projects mentioned and recommended in the original post on reddit.com/r/flask

Our great sponsors
  • SonarLint - Clean code begins in your IDE with SonarLint
  • Scout APM - Less time debugging, more time building
  • SaaSHub - Software Alternatives and Reviews
  • pytest-flask-sqlalchemy

    A pytest plugin for preserving test isolation in Flask-SQLAlchemy using database transactions.

    import flask import pytest import responses import werkzeug from myproject.app import create_app from myproject.ext import db class TestClient(flask.testing.FlaskClient): def __init__(self, *args, user=None, auth_token=None, **kwargs): self.user = user self.auth_token = auth_token super().__init__(*args, **kwargs) def open(self, *args, **kwargs): headers = kwargs.pop("headers", werkzeug.datastructures.Headers()) headers.extend({"Authorization": f"Bearer {self.auth_token}"}) kwargs["headers"] = headers return super().open(*args, **kwargs) test_app = create_app(conf="test") test_app.test_client_class = TestClient @pytest.fixture(scope="session", autouse=True) def app(): with test_app.app_context(): yield test_app @pytest.fixture(scope="session", autouse=True) def _db(app): import myproject.libs.mock_data db.create_all() myproject.libs.mock_data.load_data() yield db db.session.close() db.drop_all() @pytest.fixture(scope="function", autouse=True) def enable_transactional_tests(db_session): """ Ensure every test case is wrapped in a database transaction, that is rollbacked automatically. https://github.com/jeancochrane/pytest-flask-sqlalchemy#enabling-transactions-without-fixtures """ pass @pytest.fixture(scope="function", autouse=True) def create_responses(app): """ Ensure responses is always turned on for all test cases, so that if a test case forgets to mock something, it will be caught, and responses will raise a ConnectionError. """ ENABLE_RESPONSES = app.config["ENABLE_RESPONSES"] if ENABLE_RESPONSES: responses.start() yield responses.stop() responses.reset() else: yield @pytest.fixture(scope="session") def client(app): with app.test_client() as client: yield client

  • flask_for_startups

    Flask boilerplate using a services oriented structure

    Here's my conftest setup for reference (repo here:

  • SonarLint

    Clean code begins in your IDE with SonarLint. Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts