2017-08-10 96 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); –

相關問題