摩卡和应该断言而不是按预期工作
Mocha and should assertion and not working as expected
我使用 Mocha 并且应该作为节点 js 模块的测试框架。
到现在为止一切正常,现在我需要断言两个对象相等。
我得到了错误(测试失败),而对象是相同的(我使用 webStorm 10)并且 Diff window 显示了两个对象并且它们相同(我在 diff window 中也看到了消息内容是相同...)
它可能是什么,有办法解决这个问题吗?
我尝试了两个都失败了
should(inObjBefore).be.exactly({env: outObjAfter});
inObjBefore.should.be.exactly({ env: outObjAfter});
exactly
使用严格相等进行精确比较,即 ===
。
在 javascript 中,对象是按引用存储的,而不是按值存储的。因此,当比较两个对象时,只有当它们具有相同的引用时,它们才会彼此相等:
var a = {
x: 10
};
a === a // true
a === { x: 10 } // false
因此,您要么需要与同一个对象进行比较,要么可以使用 deepEqual
。
我现在无法对此进行测试,但可能是 should.be.exactly 正在检查完全相同的对象实例,而您有两个实例并且您有兴趣了解它们的属性是否相等。
即
A = object.with.name.is.Joe
B = otherObject.with.name.is.Joe
a.should.equal(b) = true
À.should.be.exactly(b) = false
对不起我 phone,无法验证。
您需要使用深度对象比较。使用 .eql 或 .deepEqual(.eql 的别名)。
.exactly 与 .equal 相同,并与 ===.
进行引用比较
我使用 Mocha 并且应该作为节点 js 模块的测试框架。 到现在为止一切正常,现在我需要断言两个对象相等。 我得到了错误(测试失败),而对象是相同的(我使用 webStorm 10)并且 Diff window 显示了两个对象并且它们相同(我在 diff window 中也看到了消息内容是相同...)
它可能是什么,有办法解决这个问题吗?
我尝试了两个都失败了
should(inObjBefore).be.exactly({env: outObjAfter});
inObjBefore.should.be.exactly({ env: outObjAfter});
exactly
使用严格相等进行精确比较,即 ===
。
在 javascript 中,对象是按引用存储的,而不是按值存储的。因此,当比较两个对象时,只有当它们具有相同的引用时,它们才会彼此相等:
var a = {
x: 10
};
a === a // true
a === { x: 10 } // false
因此,您要么需要与同一个对象进行比较,要么可以使用 deepEqual
。
我现在无法对此进行测试,但可能是 should.be.exactly 正在检查完全相同的对象实例,而您有两个实例并且您有兴趣了解它们的属性是否相等。
即
A = object.with.name.is.Joe
B = otherObject.with.name.is.Joe
a.should.equal(b) = true
À.should.be.exactly(b) = false
对不起我 phone,无法验证。
您需要使用深度对象比较。使用 .eql 或 .deepEqual(.eql 的别名)。 .exactly 与 .equal 相同,并与 ===.
进行引用比较