烧瓶单元测试和烧瓶安全性也有问题



我有一个简单的Flask应用程序,也有烧瓶安全性和一些单元测试。

测试.py

class UserModelCase(unittest.TestCase):
def setUp(self):
self.app = create_app(TestConfig)
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
self.app_context.pop()

app/init.py

db = SQLAlchemy()
admin = Admin(name='abcd', template_mode='bootstrap4')
security = Security()  
def create_app(config_class=Configuration):
app = Flask(__name__)
app.config.from_object(config_class)
db.init_app(app)
fsqla.FsModels.set_db_info(db)
from app.models import User, Role, Comment, Post
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security.init_app(app, user_datastore, register_form=ExtendedRegisterForm)
...
return app

以及一些测试。任何测试都有效,但如果我在第二天运行所有测试,我会出现错误:

sqlalchemy.exc.InvalidRequestError:已经为此元数据实例定义了表"roles_sers"。指定"extend_existing=True"以重新定义现有表对象上的选项和列。

self.app = create_app(TestConfig)

但在我的情况下,我不定义表";roles_users";,它是自动创建的,我还没有定义";角色_用户";在我的模型中.py

如何运行所有测试以避免错误?请帮帮我

thx,jwag。感谢你的指导,经过一番思考,我加入了测试班。它帮助

@classmethod
def setUpClass(cls) -> None:
cls.app = create_app(TestConfig)

这里的主要问题是,您需要为每个测试创建一个新的db实例,因为在create_app((中,您正在执行db.init(app(,这可能是失败的地方。

这可能也适用于您的Security和Admin对象。

尽量不要使用create_app((,而是在测试夹具Setup((中执行等效操作

最新更新