如何在单元测试中比较JavaScript对象?

时间:2015-03-01 13:51:15

标签: javascript node.js unit-testing

我想知道在单元测试中比较对象的正确方法。出于此示例的目的,我使用assertmocha来测试一个简单的库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。我这样做了吗?

1 个答案:

答案 0 :(得分:4)

您不应该使用JSON.stringify,此方法的问题是根据MDN JSON.stringify()

  

不保证非数组对象的属性按任何特定顺序进行字符串化。不要依赖于字符串化内同一对象内的属性排序。

此时您可以将{"a":2, "b":3}{"b":3, "a":2}进行比较。

而不是你应该使用例如assert.deepEqual(说实话我从未使用过assert但是在命名时它应该是正确的函数)