如何正确地使用烧瓶和sqlalchemy的pytest

问题描述 投票:0回答:0
Flask

套件。为了使自己开始,我遵循了几个教程,特别是this

,this
,this
this。现在,大约5小时后,我被以下信息完全击败: RuntimeError: The current Flask app is not registered with this 'SQLAlchemy' instance. Did you forget to call 'init_app', or did you create multiple 'SQLAlchemy' instances? 在这里我所做的。我创建了一个带有以下内容的文件: tests/conftest.py

,然后我创建了一个名为
import pytest
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

class Config:
    SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"
    TESTING = True

@pytest.fixture(scope="session")
def app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db = SQLAlchemy()
    db.init_app(app)

    with app.app_context():
        db.create_all()
        yield app
        db.session.close()
        db.drop_all()

的测试文件

tests/test_db.py

我尝试了大约573个变化,没有和不使用
from app.models import User

def test_init(app):
    with app.app_context():
        id = "0"
        user_query = User.query.filter_by(id=id).first()
,将数据库init转移到单独的固定装置,使用

app_context

,创建客户端,
pytest-flask-sqlalchemy

等。无论我做什么,我要么得到
app_context().push()
消息或

The current Flask app is not registered

为了良好的措施,我要求chatgpt提供一个工作解决方案,然后重复几次请求,以尝试其每个同样无功能的解决方案。但这是可以预料的...
谁能给我一个实际的示例,说明如何将pytest与烧瓶和sqlalchemy一起使用?
    
	
也许您可以如何设置测试客户端。乍一看,它看起来还不错。我做了类似的事情,但使用了Postgres数据库进行测试。
A 'SQLAlchemy' instance has already been registered on this Flask app. Import and use that instance instead
this设置应该有效。
您可以检查我过去还编写测试的宠物项目(
repo

)。这是我在烧瓶上写的第一个项目之一,所以我会做不同的事情。

flask pytest flask-sqlalchemy
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.