比较chai中的数组
我正在用chai和chai-as-promised(以及更多的框架,但在这种情况下并不重要)编写一些testing,我需要检查从网页获得的数组是否与预定义的数组相同。 我试图使用expect(arrayFromPage).to.eventually.deep.equal(predefinedArray)
,但它不会工作,因为页面上的元素顺序有时是不同的(这是好的,我不需要检查他们是否是在相同的顺序)。
我已经find一种方法来解决问题,通过使用expect(listFromPage).to.eventually.include.all.members(predefinedArray)
,但我想知道是否有更好的解决scheme。
在我的解决方法中,最让我困扰的是,我只能确保listFromPage
是listFromPage
子集,而不是它们由相同的元素组成。
所以,我想知道是否有一个断言会通过[1,2,3]
和[3,2,1]
,但不是[1]
和[1,2,3]
或[1,2,3,4]
和[1,2,3]
。
我知道我可以使用第二个期望(比较长度或其他),但我想知道是否有单线解决scheme。
看到这个标记已经解决了,我尝试着和接受的答案做同样的事情。 这可能是当时的工作,但似乎没有工作了:
expect([1, 2, 3, 4]).to.have.all.members([2, 4, 3, 1]);
给出以下错误:
AssertionError: expected 1 to be an array
我做了一些更多的研究,发现了一个在2013年添加了这个function的pull请求:
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 ]
希望这有助于任何人现在search相同的答案。 🙂
从文档中并不完全清楚,但是所有的.to.have.all.members
似乎都能工作。 我只能find.keys
的这个function,但看起来它也适用于.members
数组。
你可以做两行:
expect(listFromPage).to.eventually.include.all.members(predefinedArray) expect(predefinedArray).to.eventually.include.all.members(listFromPage)
有了这个,你会检查两个数组是否包含相同的值。 但是顺序并不重要。
从未来的angular度来看,我所使用的.deepEqual方法对我来说是有用的
assert.deepEqual(['name'], ['name'], 'this must be same to proceed');
- MongoDb嵌套数组查询以下关系
- 在mongoose中select几个字段作为数组
- 检查一个数组是否包含除JavaScript之外的其他东西?
- 在JavaScript中循环一个巨大的数组
- 将RowDataPacket对象的数组缩放到一个对象中
- 我怎样才能按字母顺序排列我的数组?
- 如何从angularjs $ http.post中读取/保存nodeJs中的json文件
- Array.prototype.each = function(callback){for(var i = 0; i <this.length; i ++)callback(this ); } – 这个可以吗?
- 如何正确地使用一个数组嵌套和压扁一个javascript对象数组(X次)