Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在单元测试中比较JavaScript对象?_Javascript_Node.js_Unit Testing - Fatal编程技术网

如何在单元测试中比较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我明白了。再次感谢。