我想知道在单元测试中比较对象的正确方法。出于此示例的目的,我使用assert
和mocha
来测试一个简单的库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
。我这样做了吗?
答案 0 :(得分:4)
您不应该使用JSON.stringify
,此方法的问题是根据MDN JSON.stringify()
不保证非数组对象的属性按任何特定顺序进行字符串化。不要依赖于字符串化内同一对象内的属性排序。
此时您可以将{"a":2, "b":3}
与{"b":3, "a":2}
进行比较。
而不是你应该使用例如assert.deepEqual
(说实话我从未使用过assert
但是在命名时它应该是正确的函数)