2015-04-09 12 views
8

Sto cercando il modo migliore per abbinare il seguente:Abbina gli oggetti parziali nelle asserzioni Chai?

 expect([ 
     { 
      C1: 'xxx', 
      C0: 'this causes it not to match.' 
     } 
     ]).to.deep.include.members([ 
     { 
      C1: 'xxx' 
     } 
     ]); 

È possibile che questo non funziona perché C0 esiste nel reale, ma non la prevede. In breve, voglio che questo si aspetti PASS, ma non sono sicuro di come farlo senza scrivere un gruppo di codice personalizzato ...

risposta

0

Credo che il modo più semplice (e certamente più semplice) sarebbe quello di:

var actual=[ 
    { 
    C1:'xxx', 
    C0:'yyy' 
    } 
]; 

actual.forEach(function(obj){ 
    expect(obj).to.have.property('C1','xxx'); 
}); 
4

Ci sono alcuni diversi plugin chai che risolvono tutti questo problema. Sono un fan di shallow-deep-equal. Usereste in questo modo:

expect([ 
    { 
     C1: 'xxx', 
     C0: 'this causes it not to match.' 
    } 
    ]).to.shallowDeepEqual([ 
    { 
     C1: 'xxx' 
    } 
    ]); 
3

chai-subset o chai-fuzzy potrebbe anche eseguire quello che stai cercando.

Chai-sottoinsieme dovrebbe funzionare in questo modo:

expect([ 
    { 
    C1: 'xxx', 
    C0: 'this causes it not to match.' 
    } 
]).to.containSubset([{C1: 'xxx'}]); 

Personalmente se io non voglio includere un altro plugin userò i property o keys matchers che chai comprende:

([ 
    { 
    C1: 'xxx', 
    C0: 'this causes it not to match.' 
    } 
]).forEach(obj => { 
    expect(obj).to.have.key('C1'); // or... 
    expect(obj).to.have.property('C1', 'xxx'); 
}); 
0

Ho scritto chai-match-pattern e lodash-match-pattern per gestire la corrispondenza parziale (e molti altri) di scenari di corrispondenza profondi.

var chai = require('chai'); 
var chaiMatchPattern = require('chai-match-pattern'); 
chai.use(chaiMatchPattern); 

// Using JDON pattern in expectation 
chai.expect([ 
    { 
    C1: 'xxx', 
    C0: 'this causes it not to match.' 
    } 
]).to.matchPattern([ 
    { 
    C1: 'xxx', 
    '...': '' 
    } 
]); 

// Using the slightly cleaner string pattern notation in expectation 
chai.expect([ 
    { 
    C1: 'xxx', 
    C0: 'this causes it not to match.' 
    } 
]).to.matchPattern(` 
    [ 
    { 
     C1: 'xxx', 
     ... 
    } 
    ] 
    ` 
);