web-dev-qa-db-fra.com

Comment résoudre "Impossible de lire la propriété 'devrait' de non défini" dans chai?

J'essaie de tester mon test de mon API nodejs RESTful mais continue de rencontrer l'erreur suivante.

Uncaught TypeError: Cannot read property 'should' of undefined

J'utilise le framework restify pour mon API.

'use strict';

const mongoose = require('mongoose');
const Customer = require('../src/models/customerSchema');

const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../src/app');
const should = chai.should();

chai.use(chaiHttp);

describe('Customers', () => {
   describe('/getCustomers', () => {
       it('it should GET all the customers', (done) => {
           chai.request(server)
               .get('/getCustomers')
               .end((err, res) => {
                   res.should.have.status(200);
                   res.body.should.be.a('array');
                   done();
                });
       });
   });
});

Les tests fonctionnent bien lorsque je supprime la ligne res.body.should.be.a('array'); Y a-t-il de toute façon que je peux résoudre ce problème?

8
BattleFrog

Normalement, lorsque vous soupçonnez qu'une valeur peut être undefined ou null, vous encapsulez la valeur dans un appel à should(), par exemple should(res.body), car le fait de référencer toute propriété sur null ou undefined entraîne une exception.

Cependant, Chai utilise une ancienne version de should qui ne prend pas cela en charge, vous devez donc affirmer au préalable l'existence de la valeur.

Ajoutez plutôt une assertion supplémentaire:

should.exist(res.body);
res.body.should.be.a('array');

Chai utilise une version ancienne/obsolète de should, donc la fonction should(x).be.a('array') habituelle ne fonctionnera pas.


Alternativement, vous pouvez utiliser directement le package officiel should :

$ npm install --save-dev should

et utilisez-le en remplacement:

const should = require('should');

should(res.body).be.a('array');
10
Qix