预期testing不适用于ES6 / ES2015 Set对象
问题
下面的testing应该会失败,但是正在通过:
it('should fail', () => { const actual = new Set('a'); const expected = new Set('b'); expect(actual).toEqual(expected); });
背景和问题
我使用npm的expect
包 。 我使用Babel 5来使用Set 。 我正在使用节点5,所以使用的集应该是本地的 。 我做错了什么,或者它看起来像在处理集的方式expect
包中的错误? 我已经在包裹上贴了一个问题,因为我不确定。
1.这是“预期行为”
expect
取决于deep-equal
,这不支持集合和地图。
这符合节点assert
的行为:
var a = new Set('a'); var b = new Set('b'); console.log(require('assert').deepEqual(a, b) || 'ok'); // Prints 'ok' !
这个问题已经在这里讨论过了:
assert:添加对Set和Map的支持
这个评论特别有趣:
我不认为我们应该这样做(或者#2309中的其他)。 断言应该只用于testingio.js本身,而不是试图成为一个好的通用断言库。 如果io.jstesting需要足够的时间来分析这个能力,那么我们应该,但是在那之前,只需要添加它,因为这样做不错,这不是一个好主意。
2.解决方法
你可以:
- 使用assert6
- 或(重新)打开门票,引起关注
- 或使用另一个库,如@ simon-pr提到的代码
- 或手动进行比较。 请参阅比较ECMA6集合是否相等