预期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集合是否相等