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

How to compare JavaScript objects in a unit test?

本文关键字:比较 JavaScript 对象 单元测试      更新时间:2024-07-07

我想知道在单元测试中比较对象的正确方法。为了这个例子的目的,我使用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是否是推荐的做法。我这样做对吗?

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

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

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

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