问题标签 [mongomock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mongoengine - 测试用例使用 mongomock pymongo mongoengine 失败
我正在尝试使用 pymongo 版本为 2.X 和 mongoengine 0.10.6 的 mongomock 运行测试用例
我试图将 pymongo 的版本从 2.6.3 更改为 2.9.5,将 mongoengine 从 0.10.6 更改为 0.17.0。我尝试过从 3.0.0 到 3.17.0 的 mongomock
我希望测试用例能够通过我目前收到的消息
python - 将 ObjectId 插入 mongodb
我正在开发一个 mongo 数据库,由于某种原因,该数据库将用户 ID 存储为ObjectId
.
为了测试一些功能,我希望能够填充一个测试数据库 - 例如,如下:
但是,运行此返回
InvalidId:“my_user_id”不是有效的 ObjectId,它必须是 12 字节的输入或 24 字符的十六进制字符串
如何正确地将 ObjectId 对象插入到我的测试数据库中,以便我可以使用
(当我查询真实数据库时效果很好)?
python - pytest monkeypatch 无法修补 mongodb 集合
我正在尝试使用 pytest 对以下函数进行单元测试。
以下是我写的测试
我正在尝试mongo.db.users
用我用 mongomock 制作的假的替换mongomock.MongoClient().db.collection
。但是,当我运行此测试时,它显示如下所示的属性错误:
E AttributeError: 'function' 对象没有属性 'find_one'
我不确定为什么 mock_db() 返回类型function
而不是类型<class'mongomock.collection.Collection'>
让我知道是否有人有任何建议。
谢谢你。
python - 使用新对象更新记录
假设我有以下 MongoDB 集合(mongomock
用于此示例,因此很容易重现):
然后我想用一些新对象的字段更新我现有的对象:
我能想到的唯一方法是:
但是,如果new_objects
非常大,那么这种方法会变慢 - 有没有办法使用update_many
它?
mongodb - 模拟 MongoDB 以测试 Flask 中设计的 REST API
我有一个 Flask 应用程序,其中 REST API 是使用带有 MongoDB 后端的 flask_restful 构建的。我想使用 pytest 和 mongomock 编写功能测试来模拟 MongoDB 以测试 API,但无法对其进行配置。谁能指导我提供一个可以实现相同目标的示例?这是我在 conftest.py 文件中使用的夹具:
这是用于测试创建用户的发布请求的测试功能:
问题是 pytest 不是使用 testdb,而是在生产数据库中创建用户。配置中是否缺少某些内容?
python - 如何将mongomock与unittest python一起使用
我尝试在测试中模拟我的 Mongo 数据库。我找到了我关注的文章,但不幸的是我的测试写入真正的 mongo 数据库而不是模拟。我有创建database.py
文件PyMongo
:
我在文件中导入mongo
变量__init__.py
以使用应用程序进行初始化:
我使用自定义 Mongo 类来查找数据并插入到 mongo,这是我的控制器的示例:
这是我的MongoCache
课:
但是当我添加修补 PyMongo 客户端时,它对我不起作用:
tests.py
有没有人有任何建议我做错了什么,我该如何解决?
python - mongomock 聚合 $lookup 不能像真正的 mongo db (python) 那样解析集合名称
我有一个简单的聚合查找查询,如下所示:
请注意,此查询使用customer
其from
子句的其他集合。这个查询对实际的 mongo db 工作得很好,但对我的mongomock.MognoClient
对象没有。
为了让它与mongomock一起工作,我需要将数据库前缀添加到查询中,如下所示:
但是,如果我这样做,则此查询不再适用于实际的 mongo DB。这里出了什么问题?我无法创建适用于模拟和实际数据库的代码。
如果我不包含数据库名称,则模拟不会找到其他集合来加入它。需要明确的是,这两个查询在各自的“系统”上都可以正常工作,并且两个集合都可以在自己的模拟中查询。如果子句不包含数据库名称前缀,则仅在 mongomock中查找customer
集合就无法正常工作。from
pytest - mongoengine 文档、多租户数据库、pytest+mongomock
我继承了一个完善的基于烧瓶的 API 服务,该服务广泛使用了 mongoengine。我们正在将这个单数据库 API 变成一个多租户服务,并不清楚最佳实践。由于许多原因,租户数据将被物理隔离到不同的数据库中,每个租户一个 db。(对于某些文档,还有一个到“核心”数据库的连接。)
用例工作流程很简单:
- 收到请求
- 验证 API 访问令牌并协调用户/租户
- 将数据库连接切换到正确的租户数据库
- 做文档操作
似乎实现这一点的最佳方法是使用别名,但是当我进行上下文切换时,我需要disconnect('tenant_db')
使用connect(alias='tenant_db')
. 这感觉不对。
无论如何,代码确实有效,但现在我遇到了单元测试问题。在测试并使用(每个文档)mongomock://localhost
连接时,代码实际上会超时尝试连接到在 localhost 上运行的真实 mongodb。我怀疑这一切都与没有适当范围的模拟连接有关,但我找不到太多关于使用模拟数据库进行测试的文档。
抱歉,两个问题合二为一:
- 那么
disconnect
重connect
别名模式是正确的方法吗 - pytest+mongoengine+mongomock有没有更好的实践(或更清晰的例子)
不是 pytest 的专业人士,但也不是新手。坚固pymongo
但全新mongoengine
。
谢谢!
pymongo - 如何在电机上使用 mongomock 测试客户端
我有一个类的以下代码库,它封装了与 mongodb 的交互以用于休息应用程序:
我想像mongomock
测试普通pymongo
代码一样使用它来测试它。但是我只是无法理解如何编写将创建类实例的夹具,因为我需要一些 URI,而且由于我们没有事件循环,我认为motor
会引发错误。
有人可以给我一些指示吗?可能只是对其中一种方法的简单测试,例如get_all_authors
现在可以做的。我检查了这个包pytest-async-mongodb
,但这似乎是一个开发版本,我认为它不是标准化的。
请求您提供一些关于如何使用电机等异步代码测试它的提示。提前致谢。
python - 使用 pytest 的 Python 单元测试覆盖率
我是 pytest 的新手,想为单元测试覆盖添加以下 3 种方法,而不是实际使用真正的 mongo db 实例,而是模拟它。可以尝试使用真正的数据库实例,但不推荐。请求关于如何模拟 mongodb 客户端并获取文档的示例
编辑:(尝试使用下面的代码并且能够涵盖大多数情况但看到错误)
错误:test_exception - 失败:DID NOT RAISE <class 'Exception'> test_createDoc - TypeError:在字符串格式化期间并非所有参数都转换 AssertionError:断言 <pymongo.results.UpdateResult object at 0x7fc0e835a400> == <pymongo.results.UpdateResult object at 0x7fc0e8211900 >