如何解决Flask 单元测试和 Flask 安全性也有问题
我也有带有烧瓶安全性的简单 Flask 应用程序和一些单元测试。
test.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_users”。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。
在self.app = create_app(TestConfig)
但就我而言,我没有定义表“roles_users”,它是自动创建的,我的models.py 中没有定义“roles_users”
我如何运行所有测试以避免错误?请帮帮我
解决方法
这里的主要问题是您需要为每个测试创建一个新的数据库实例 - 因为在 create_app() 中您正在执行 db.init(app) - 这可能是事情失败的地方。
这可能也适用于您的安全和管理对象。
尽量不使用 create_app() 并在您的测试装置 Setup() 中执行等效操作
,谢谢,jwag。感谢您的指导,经过深思熟虑后,我将其添加到 testclass 中。它帮助了
@classmethod
def setUpClass(cls) -> None:
cls.app = create_app(TestConfig)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。