问题标签 [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.

0 投票
0 回答
93 浏览

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

我希望测试用例能够通过我目前收到的消息

0 投票
2 回答
3369 浏览

python - 将 ObjectId 插入 mongodb

我正在开发一个 mongo 数据库,由于某种原因,该数据库将用户 ID 存储为ObjectId.

为了测试一些功能,我希望能够填充一个测试数据库 - 例如,如下:

但是,运行此返回

InvalidId:“my_user_id”不是有效的 ObjectId,它必须是 12 字节的输入或 24 字符的十六进制字符串

如何正确地将 ObjectId 对象插入到我的测试数据库中,以便我可以使用

(当我查询真实数据库时效果很好)?

0 投票
0 回答
343 浏览

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'>

让我知道是否有人有任何建议。

谢谢你。

0 投票
1 回答
81 浏览

python - 使用新对象更新记录

假设我有以下 MongoDB 集合(mongomock用于此示例,因此很容易重现):

然后我想用一些新对象的字段更新我现有的对象:

我能想到的唯一方法是:

但是,如果new_objects非常大,那么这种方法会变慢 - 有没有办法使用update_many它?

0 投票
0 回答
730 浏览

mongodb - 模拟 MongoDB 以测试 Flask 中设计的 REST API

我有一个 Flask 应用程序,其中 REST API 是使用带有 MongoDB 后端的 flask_restful 构建的。我想使用 pytest 和 mongomock 编写功能测试来模拟 MongoDB 以测试 API,但无法对其进行配置。谁能指导我提供一个可以实现相同目标的示例?这是我在 conftest.py 文件中使用的夹具:

这是用于测试创建用户的发布请求的测试功能:

问题是 pytest 不是使用 testdb,而是在生产数据库中创建用户。配置中是否缺少某些内容?

0 投票
0 回答
1014 浏览

python - 如何将mongomock与unittest python一起使用

我尝试在测试中模拟我的 Mongo 数据库。我找到了我关注的文章,但不幸的是我的测试写入真正的 mongo 数据库而不是模拟。我有创建database.py文件PyMongo

我在文件中导入mongo变量__init__.py以使用应用程序进行初始化:

我使用自定义 Mongo 类来查找数据并插入到 mongo,这是我的控制器的示例:

这是我的MongoCache课:

但是当我添加修补 PyMongo 客户端时,它对我不起作用: tests.py

有没有人有任何建议我做错了什么,我该如何解决?

0 投票
1 回答
114 浏览

python - mongomock 聚合 $lookup 不能像真正的 mongo db (python) 那样解析集合名称

我有一个简单的聚合查找查询,如下所示:

请注意,此查询使用customerfrom子句的其他集合。这个查询对实际的 mongo db 工作得很好,但对我的mongomock.MognoClient对象没有。

为了让它与mongomock一起工作,我需要将数据库前缀添加到查询中,如下所示:

但是,如果我这样做,则此查询不再适用于实际的 mongo DB。这里出了什么问题?我无法创建适用于模拟和实际数据库的代码。

如果我不包含数据库名称,则模拟不会找到其他集合来加入它。需要明确的是,这两个查询在各自的“系统”上都可以正常工作,并且两个集合都可以在自己的模拟中查询。如果子句不包含数据库名称前缀,则仅在 mongomock中查找customer集合就无法正常工作。from

0 投票
1 回答
118 浏览

pytest - mongoengine 文档、多租户数据库、pytest+mongomock

我继承了一个完善的基于烧瓶的 API 服务,该服务广泛使用了 mongoengine。我们正在将这个单数据库 API 变成一个多租户服务,并不清楚最佳实践。由于许多原因,租户数据将被物理隔离到不同的数据库中,每个租户一个 db。(对于某些文档,还有一个到“核心”数据库的连接。)

用例工作流程很简单:

  • 收到请求
  • 验证 API 访问令牌并协调用户/租户
  • 将数据库连接切换到正确的租户数据库
  • 做文档操作

似乎实现这一点的最佳方法是使用别名,但是当我进行上下文切换时,我需要disconnect('tenant_db')使用connect(alias='tenant_db'). 这感觉不对。

无论如何,代码确实有效,但现在我遇到了单元测试问题。在测试并使用(每个文档)mongomock://localhost连接时,代码实际上会超时尝试连接到在 localhost 上运行的真实 mongodb。我怀疑这一切都与没有适当范围的模拟连接有关,但我找不到太多关于使用模拟数据库进行测试的文档。

抱歉,两个问题合二为一:

  1. 那么disconnectconnect别名模式是正确的方法吗
  2. pytest+mongoengine+mongomock有没有更好的实践(或更清晰的例子)

不是 pytest 的专业人士,但也不是新手。坚固pymongo但全新mongoengine

谢谢!

0 投票
0 回答
150 浏览

pymongo - 如何在电机上使用 mongomock 测试客户端

我有一个类的以下代码库,它封装了与 mongodb 的交互以用于休息应用程序:

我想像mongomock测试普通pymongo代码一样使用它来测试它。但是我只是无法理解如何编写将创建类实例的夹具,因为我需要一些 URI,而且由于我们没有事件循环,我认为motor会引发错误。

有人可以给我一些指示吗?可能只是对其中一种方法的简单测试,例如get_all_authors现在可以做的。我检查了这个包pytest-async-mongodb,但这似乎是一个开发版本,我认为它不是标准化的。

请求您提供一些关于如何使用电机等异步代码测试它的提示。提前致谢。

0 投票
2 回答
176 浏览

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 >