2013-07-09 6 views
11

Chai ha un bel modo per affermare se un array include un certo elementoMocha, Chai: sostengono che oggetto viene incluso in un array di oggetti

expect([1,2,3]).to.include(2); 

Quello che vorrei è qualcosa di simile, dato un array di Oggetti:

expect([{a:1},{b:2}]).to.include({b:2}); 

È possibile?

+0

Hai provato? La documentazione sembra implicare che funzionerebbe. http://chaijs.com/api/bdd/#include – Schleis

+0

Sì, ho provato - quegli esempi mostrano solo come testare se esiste una certa chiave, non il valore effettivo (o l'intero oggetto per quella materia) – mck

risposta

18

Date un'occhiata al Chai Things plugin, che fa quello che si vuole:

[{a:1},{b:2}].should.include.something.that.deep.equals({b:2}) 
+0

esattamente quello che ero cercando: +1: grazie! – mck

+0

e se avessi il controllo [{a: 1}, {a: 2}]. Contiene (['a']) come faresti – PirateApp

7

Ecco un approccio alternativo e dipendente non ordine per le collezioni:

serie

expect([1, 2, 3]).to.include.members([3, 2, 1]) 

Puoi utilizzare anche questo con un flag deep per il confronto di oggetti:

array di oggetti

expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]); 

oggetto

expect({foo: 'bar', width: 190, height: 90}).to.include({ height: 90, width: 190 }) 
0

È possibile utilizzare il metodo profondo per la matrice di oggetti.

expect ([{a: 1}, {b: 2}]) to.deep.include ({b: 2}); // Passerà

Puoi trovare altri esempi con il metodo profonda Here

Il punto principale da ricordare è sui tipi di riferimento.

Problemi correlati