比较 chai 中的数组
Comparing arrays in chai
我正在用 chai 和 chai-as-promised (以及更多框架,但在这种情况下并不重要)编写一些测试,我需要检查我从网页获得的数组是否相同作为预定义数组。我尝试使用 expect(arrayFromPage).to.eventually.deep.equal(predefinedArray)
,但它不起作用,因为页面上元素的顺序有时不同(这没关系,我不需要检查它们是否按相同的顺序)。
我找到了使用 expect(listFromPage).to.eventually.include.all.members(predefinedArray)
解决此问题的方法,但我想知道是否有更好的解决方案。
在我的解决方法中最困扰我的是,我只保证 predefinedArray
是 listFromPage
的子集,而不是它们由相同的元素组成。
所以,我想知道是否有一个断言会通过 [1,2,3]
和 [3,2,1]
,但不会通过 [1]
和 [1,2,3]
或 [1,2,3,4]
和 [1,2,3]
.
我知道我可以使用一些第二期望值(比较长度或其他东西),但我想知道是否有单线解决方案。
你可以用 2 行来完成:
expect(listFromPage).to.eventually.include.all.members(predefinedArray)
expect(predefinedArray).to.eventually.include.all.members(listFromPage)
有了这个,您将检查两个数组是否包含相同的值。但顺序并不重要。
从文档中看并不完全清楚,但 .to.have.all.members
似乎有效。我只能为 .keys
找到此功能的提及,但看起来它也适用于 .members
和数组。
鉴于这已被标记为先前已解决,我尝试执行与接受的答案中相同的操作。它可能在当时有效,但似乎不再有效:
expect([1, 2, 3, 4]).to.have.all.members([2, 4, 3, 1]);
给出以下错误:
AssertionError: expected 1 to be an array
我做了更多研究,发现了一个在 2013 年添加此功能的拉取请求:
https://github.com/chaijs/chai/pull/153
所以现在官方的做法是这样的:
expect([1, 2, 3, 4]).to.have.same.members([2, 4, 3, 1]);
为了完整起见,这是两个不同集合产生的错误:
AssertionError: expected [ 1, 2, 3, 4 ] to have the same members as [ 4, 3, 1 ]
希望这对现在搜索相同答案的任何人有所帮助。 :-)
从未来开始,对我有用的方法是使用 .deepEqual,这对我有用
assert.deepEqual(['name'], ['name'], 'this must be same to proceed');
.members
现在似乎是这样做的方法。
具体来说:
have.members
和
have.deep.members
根据您的需要。
我正在用 chai 和 chai-as-promised (以及更多框架,但在这种情况下并不重要)编写一些测试,我需要检查我从网页获得的数组是否相同作为预定义数组。我尝试使用 expect(arrayFromPage).to.eventually.deep.equal(predefinedArray)
,但它不起作用,因为页面上元素的顺序有时不同(这没关系,我不需要检查它们是否按相同的顺序)。
我找到了使用 expect(listFromPage).to.eventually.include.all.members(predefinedArray)
解决此问题的方法,但我想知道是否有更好的解决方案。
在我的解决方法中最困扰我的是,我只保证 predefinedArray
是 listFromPage
的子集,而不是它们由相同的元素组成。
所以,我想知道是否有一个断言会通过 [1,2,3]
和 [3,2,1]
,但不会通过 [1]
和 [1,2,3]
或 [1,2,3,4]
和 [1,2,3]
.
我知道我可以使用一些第二期望值(比较长度或其他东西),但我想知道是否有单线解决方案。
你可以用 2 行来完成:
expect(listFromPage).to.eventually.include.all.members(predefinedArray)
expect(predefinedArray).to.eventually.include.all.members(listFromPage)
有了这个,您将检查两个数组是否包含相同的值。但顺序并不重要。
从文档中看并不完全清楚,但 .to.have.all.members
似乎有效。我只能为 .keys
找到此功能的提及,但看起来它也适用于 .members
和数组。
鉴于这已被标记为先前已解决,我尝试执行与接受的答案中相同的操作。它可能在当时有效,但似乎不再有效:
expect([1, 2, 3, 4]).to.have.all.members([2, 4, 3, 1]);
给出以下错误:
AssertionError: expected 1 to be an array
我做了更多研究,发现了一个在 2013 年添加此功能的拉取请求:
https://github.com/chaijs/chai/pull/153
所以现在官方的做法是这样的:
expect([1, 2, 3, 4]).to.have.same.members([2, 4, 3, 1]);
为了完整起见,这是两个不同集合产生的错误:
AssertionError: expected [ 1, 2, 3, 4 ] to have the same members as [ 4, 3, 1 ]
希望这对现在搜索相同答案的任何人有所帮助。 :-)
从未来开始,对我有用的方法是使用 .deepEqual,这对我有用
assert.deepEqual(['name'], ['name'], 'this must be same to proceed');
.members
现在似乎是这样做的方法。
具体来说:
have.members
和
have.deep.members
根据您的需要。