【发布时间】:2019-07-25 02:44:17
【问题描述】:
我不知道这是否可以做到,但我正在尝试模拟我的 db.session.save。
我正在使用烧瓶和烧瓶炼金术。
db.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
单元测试
def test_post(self):
with app.app_context():
with app.test_client() as client:
with mock.patch('models.db.session.save') as mock_save:
with mock.patch('models.db.session.commit') as mock_commit:
data = self.gen_legend_data()
response = client.post('/legends', data=json.dumps([data]), headers=access_header)
assert response.status_code == 200
mock_save.assert_called()
mock_commit.assert_called_once()
以及方法:
def post(cls):
legends = schemas.Legends(many=True).load(request.get_json())
for legend in legends:
db.session.add(legend)
db.session.commit()
return {'message': 'legends saved'}, 200
我正在尝试模拟 db.session.add 和 db.session.commit。我试过db.session.save 和legends.models.db.session.save 和models.db.session.save。他们都返回了保存错误:
ModuleNotFoundError: No module named 'models.db.session'; 'models.db' is not a package
我没有收到错误,我不知道如何解决它。
或者我想要模拟 db.session 是不是在做一些完全错误的事情?
谢谢。 戴斯蒙德
【问题讨论】:
-
当您的代码中没有调用此类方法时,您为什么要模拟
Session.save()? (而Session没有这种方法)
标签: python sqlalchemy mocking flask-sqlalchemy pytest