如何在单元测试中比较JavaScript对象?
我想知道在单元测试中比较对象的正确方法。在本例中,我使用并测试了一个简单的库如何在单元测试中比较JavaScript对象?,javascript,node.js,unit-testing,Javascript,Node.js,Unit Testing,我想知道在单元测试中比较对象的正确方法。在本例中,我使用并测试了一个简单的库mylib,其中包含一个返回对象的方法method var assert = require("assert"); var mylib = require("../src/mylib"); describe("method", function() { it("does something clever and returns an object", function() { assert.equal(
mylib
,其中包含一个返回对象的方法method
var assert = require("assert");
var mylib = require("../src/mylib");
describe("method", function() {
it("does something clever and returns an object", function() {
assert.equal(
JSON.stringify({/* expected object */}),
JSON.stringify(mylib.method(["items", "in", "the", "list"])));
});
});
上述方法很有效,但我不知道使用
JSON.stringify
是否是一种推荐做法。我这样做对吗?您不应该使用JSON.stringify
,这种方法的问题在于
非数组对象的属性不保证按任何特定顺序进行字符串化。不要依赖于字符串化中同一对象内属性的排序
因此,您可以将{a:2,“b:3}
与{b:3,“a:2}
进行比较
相反,您应该使用例如
assert.deepEqual
(老实说,我从未使用过assert
,但在命名时它应该是正确的函数)assert.deepEqual
非常合适。哦,想想我在得知它在那里之前参加的体操比赛。谢谢。Node的文档有点缺乏。不使用assert
有什么特别的原因吗?@JorgeBucaran没有,我只是更喜欢,因为它的样式有点冗长,例如expect(foo).to.deep.equal({bar:'baz'})代码>或期望(饮料).to.have.property('tea')。长度为.3代码>。在我看来,摩卡的风格非常适合。@t.niese我明白了。再次感谢。