web-dev-qa-db-fra.com

Chai - Test des valeurs dans un tableau d'objets

Je configure mes tests pour les résultats sur un point de terminaison REST qui me renvoie un tableau d'objets de base de données Mongo.

[{_id: 5, title: 'Blah', owner: 'Ted', description: 'something'...},
 {_id: 70, title: 'GGG', owner: 'Ted', description: 'something'...}...]

Ce que je veux que mes tests vérifient, c'est que dans le tableau de retour, il contient les titres spécifiques qui doivent retourner. Rien de ce que je fais en utilisant Chai/ Chai-Things ne semble fonctionner. Des choses comme res.body.savedResults.should.include.something.that.equals({title: 'Blah'}) error out, je suppose que l'objet d'enregistrement contient d'autres clés et valeurs en plus du titre.

Existe-t-il un moyen de lui faire faire ce que je veux? J'ai juste besoin de vérifier que les titres sont dans le tableau et ne se soucient pas des autres données (IE _id).

Merci

16
Jared Yach

C'est ce que je fais habituellement dans le test:

var result = query_result;

var members = [];
result.forEach(function(e){
    members.Push(e.title);
});

expect(members).to.have.members(['expected_title_1','expected_title_2']);

Si vous connaissez l'ordre du tableau de retour, vous pouvez également le faire:

expect(result).to.have.deep.property('[0].title', 'expected_title_1');
expect(result).to.have.deep.property('[1].title', 'expected_title_2');
19
user2263572

Comme indiqué ici le code suivant fonctionne maintenant avec [email protected] et chai-things . J'adore la lisibilité naturelle de cette approche.

var chai = require('chai'),
    expect = chai.expect;

chai.use(require('chai-like'));
chai.use(require('chai-things')); // Don't swap these two

expect(data).to.be.an('array').that.contains.something.like({title: 'Blah'});
18
kub1x