2017-08-10 95 views
0

如标题所示,我们发现自己处于需要检查数组是否包含其某个属性等于某物的元素的情况。测试数组以包含具有某个键的对象:值

我们尝试并搜索了几个小时,直到我们想提出一个问题。 我们能够解决这样的问题:

const playersRegs = created.gameLog.filter(e => e.nameType === eventTypes.PlayerReg); 
expect(playersRegs).to.have.lengthOf(1); 

但我们希望的东西有点像:

expect(created.gameLog).to.include.something.that.has.property('nameType', eventTypes.PlayerReg); 

如果我们错过了什么,请让我们知道,如果我们未这样做,请考虑增加此功能;)

回答

0

chai-things看起来是你在寻找什么

和你的榜样

expect(created.gameLog).to.include.something.that.has.property('nameType', eventTypes.PlayerReg); 

正是它的语法

1

可以使用。有的()代替:

const hasPlayersReg = created.gameLog.some(e => e.nameType === eventTypes.PlayerReg); 
expect(hasPlayersReg).to.be.true; 

或.find()像这样:

const playersReg = created.gameLog.find(e => e.nameType === eventTypes.PlayerReg); 
expect(playersReg).to.not.be.undefined; 

其余的似乎很好。

+1

'find'返回'undefined'如果没有匹配的元素。可能更好地使用总是返回“true”或“false”的'some'? – user3297291

+1

好点。但柴也有一个未定义的支票,所以我更新了。增加了一些,因为它确实更好 –

+0

有没有什么办法可以在一个期望中写出整个测试?像:expect(created.gameLog).to.include.something.that.has.property('nameType',eventTypes.PlayerReg); –

相关问题