我也发现了类似的问题,但它们似乎只涵盖了嘲弄MongoDB的内容,而没有提到水瓶。
我有一个酒瓶应用程序,我正在尝试用PyTest对它进行单元测试(包括PyTest和PyTest-烧瓶)。然而,在编写任何测试之前,我的测试脚本都会崩溃。崩溃发生在使用我的Flash应用程序导入脚本时:它试图创建没有url的PyMongo对象。
我的问题是:如何确保PyMongo在这一点上被正确地模仿?根据PyTest-Mongo文档,MongoDB测试夹具应该传递给每个测试函数,但是如果它在导入上崩溃了,这对我没有帮助。
test_app.py:
import pytest
import pytest_mongodb
from app import app
@pytest.fixture
def client():
app.config['TESTING'] = True
return clientapp.py:
import ...
app = Flask(__name__)
app.config["MONGO_DBNAME"] = os.environ.get('DB_NAME')
app.config["MONGO_URI"] = os.environ.get('MONGO_URI')
app.secret_key = os.environ.get('SECRET')
mongo = PyMongo(app)
...
if __name__ == '__main__':
app.run(host=os.environ.get('IP'),
port=int(os.environ.get('PORT')),
debug=False)发布于 2019-07-04 07:30:03
需要快速修复,所以我编辑了app.py,以便只有在执行文件时PyMongo不初始化时才会硬失败(也就是说,当运行单元测试时,它会忽略PyMongo失败的初始化)。
app = Flask(__name__)
app.config["MONGO_DBNAME"] = os.environ.get('DB_NAME')
app.config["MONGO_URI"] = os.environ.get('MONGO_URI')
app.secret_key = os.environ.get('SECRET')
try:
mongodb = PyMongo(app).db
except ValueError:
"""We don't provide a URI when running unit tests, so PyMongo will fail to initialize.
This is okay because we replace it with a version for testing anyway. """
print('PyMongo not initialized!')
mongodb = None
.
.
.
if __name__ == '__main__':
if not mongodb:
print('Cannot run. PyMongo failed to initialize. Double check environment variables.')
exit(1)
app.run(host=os.environ.get('IP'),
port=int(os.environ.get('PORT')),
debug=False)在我的测试文件中,我只是在需要它的测试中将模拟的mongoDB客户端分配给应用程序。绝对不是理想的解决方案。
def test_redacted(client, mongodb):
app.mongodb = mongodb
...https://stackoverflow.com/questions/56029111
复制相似问题