2017-08-10 1 views
0

Comme le titre l'indique nous avons trouvé nous-mêmes dans une situation où nous devons vérifier si un tableau contient un élément dont l'une de ses propriétés est égale à quelque chose.Tableau de test pour inclure un objet avec une certaine clé: valeur

Nous avons essayé et cherché pendant quelques heures jusqu'à ce que nous décidions de soulever un problème à ce sujet. Nous avons pu résoudre le problème comme celui-ci:

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

mais nous espériez quelque chose d'un peu comme:

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

si nous avons raté quelque chose s'il vous plaît laissez-nous savoir et si nous ne avons pas s'il vous plaît envisager d'ajouter cette fonctionnalité;)

Répondre

0

chai-things semble être exactement ce que vous cherchez

et votre exemple

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

est exactement la syntaxe de celui-ci

1

Vous pouvez utiliser .Certaines() à la place:

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

Ou .find() comme ceci:

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

Le reste semble parfaitement bien.

+1

'find' retourne' undefined' s'il n'y a aucun élément correspondant. Probablement préférable d'utiliser 'some' qui retourne toujours' true' ou 'false'? – user3297291

+1

Bon point. Mais chai a aussi un chèque indéfini, donc j'ai mis à jour. Ajouté le un parce qu'il est en effet encore mieux –

+0

Y at-il un moyen que je puisse écrire le test dans son ensemble? comme: expect (created.gameLog) .to.include.something.that.has.property ('nameType', eventTypes.PlayerReg); –