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

Jor*_*ran 3 javascript unit-testing node.js

我想知道在单元测试中比较对象的正确方法。出于本示例的目的,我使用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"])));
  });
});
Run Code Online (Sandbox Code Playgroud)

上面的方法有效,但我不知道使用是否JSON.stringify是推荐的做法。我这样做对吗?

t.n*_*ese 5

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

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

从那时起,您可能会{"a":2, "b":3}与进行比较{"b":3, "a":2}

相反,您应该使用例如assert.deepEqual(说实话我从未使用过assert,但从命名来看它应该是正确的函数)

  • `assert.deepEqual` 是正确的。哦,想想我在知道它在那里之前经历过的体操。 (2认同)