为啥 mocha 断言在 mongoose.Schema.objectId 上失败?

Posted

技术标签:

【中文标题】为啥 mocha 断言在 mongoose.Schema.objectId 上失败?【英文标题】:why mocha assertion fails on mongoose.Schema.objectId?为什么 mocha 断言在 mongoose.Schema.objectId 上失败? 【发布时间】:2013-09-06 06:11:07 【问题描述】:

我在 mocha 的某个地方断言:

assert.equal(model.organizationId,objId);

但我得到了失败的摩卡咖啡结果:

Uncaught AssertionError: "5225777180a843d901000012" == "5225777180a843d901000012"

为什么会发生,当 id 相同时。

又该如何克服呢?

【问题讨论】:

【参考方案1】:

因此,javascript 中的 mongodb ObjectIds 在这方面令人沮丧。它们是不同的对象,导致 obj1 === obj2 评估为 false,即使它们表示的值相同。有 3 个选项:

    在比较之前转换为字符串。我经常使用它,因为否则它会令人沮丧。

    使用他们提供的.equals()方法:assert.ok(model.organizationId.equals(objId))

    编写一个自定义比较函数,可以接受 null、ObjectIds 或 Strings 并做正确的事情(我也做过)

【讨论】:

以上是关于为啥 mocha 断言在 mongoose.Schema.objectId 上失败?的主要内容,如果未能解决你的问题,请参考以下文章

Mocha,应该 - 在测试具有承诺的异步函数时,断言错误是沉默的

测试框架Mocha与断言expect

在 mocha 测试中使用带有 ts-node 的断言

断言正在破坏 Mocha 测试中的异步功能

使用 mocha 和 chaiAsPromised 测试异步函数时的断言错误

异步 Mocha 测试(使用 Chai 断言库)应该失败,但被标记为通过