我正在寻找一种简单的方法来深度比较可以包含Immutable.js对象的对象和数组。为了使编写测试更加容易。
查看以下内容。 (根据immutable.js网站上的示例代码进行修改)
const { Map, is, List } = require('immutable@4.0.0-rc.10')
const map1 = Map({ a: 1, b: 1, c: 1 })
const map2 = Map({ a: 1, b: 1, c: 1 })
assert.equal(map1 !== map2, true)
assert.equal(Object.is(map1, map2), false)
assert.equal(is(map1, map2), true)
assert.equal(is(List([map1, map2]), List([map1, map2])), true)
assert.equal(is(Map({map1, map2}), Map({map1, map2})), true)
/* I'd like these last two to be true */
assert.equal(is([map1, map2], [map1, map2]), true) // fails
assert.equal(is({map1, map2}, {map1, map2}), true) // fails
是否有任何现有的库或函数可以做到这一点?或者,如果我正在编写自己的比较器,是否有一种简便的方法来发现不可变的记录,列表和地图?
答案 0 :(得分:0)
我相信以下使用Chai's .deep
property的测试可以显示您正在寻找的行为:
const {expect} = require('chai');
const {Map, List} = require('immutable');
describe('this stuff', () => {
const map1 = Map({a: 1, b: 1, c: 1});
const map2 = Map({a: 1, b: 1, c: 1});
it('should behave itself', () => {
expect(map1).not.to.equal(map2);
expect(Object.is(map1, map2)).to.be.false;
expect(map1).to.deep.equal(map2);
expect(List([map1, map2])).to.deep.equal(List([map1, map2]));
expect(Map({map1, map2})).to.deep.equal(Map({map1, map2}));
expect([map1, map2]).to.deep.equal([map1, map2]);
expect({map1, map2}).to.deep.equal({map1, map2});
});
});
或者,不使用Chai(特别是如果用例在测试套件中不是 时特别有用):
assert([map1, map2].every((map, i) => is(map, [map1, map2][i])));
assert(Object.values({map1, map2}).every((map, i) => is(map, Object.values({map1, map2})[i])));