2015-04-09 7 views
8

szukam najlepszego sposobu, aby dopasować następujące:Dopasowywanie częściowych obiektów do asercji Chai?

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

powyższych nie działa, ponieważ C0 istnieje rzeczywista, ale nie spodziewałem. Krótko mówiąc, chcę tego oczekiwać do PASS, ale nie jestem pewien, jak to zrobić bez pisania kilka niestandardowego kodu ...

Odpowiedz

0

Wierzę, że najprostszy (i na pewno najłatwiejszy) sposób byłoby:

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

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

Istnieje kilka różnych wtyczek Chai, które rozwiązują ten problem. Jestem fanem shallow-deep-equal. Można by użyć go w ten sposób:

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

chai-subset lub chai-fuzzy może również wykonywać co szukasz.

Chai podzbioru powinno działać tak:

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

Osobiście, jeśli nie chcą zawierać inną wtyczkę Użyję property lub keys dopasowujących że chai zawiera:

([ 
    { 
    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

Napisałem chai-match-pattern i lodash-match-pattern, aby obsłużyć dopasowywanie częściowe (i wiele innych) scenariuszy dopasowywania ścisłego.

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', 
     ... 
    } 
    ] 
    ` 
); 
Powiązane problemy