2017-07-06 1 views
1

J'ai des problèmes avec la réponse http dans les tests chai, je ne sais pas comment puis-je obtenir la longueur de la res.body sauf par console.log.Problème Mocha/Chai avec http get request

c'est le test que je suis en train de courir:

it('It should have a length of 3061', function(){ 

     chai.request('http://localhost:8080') 
     .get('/api/pac/') 
     .end(function(err,res){ 

      console.log(res.body.length); //it shows 3061 
      expect(res.body).to.have.lengthOf(3061); //it causes error "Cannot read property 'body' of undefined" 

     }); 
    }); 

si j'essaie de faire Expect avec res.body, il retourne « ne peut pas lire la propriété « corps » de non définie ». Mais un fichier console.log fonctionne.

Un fichier console.log (res.body) affiche un fichier json avec 3061 objets. Chaque objet a cette structure:

iid : {type : Number}, 

dnas : [{ _id : Number, 
     col : Date, 
     reproved : {type : Boolean}, 
     wave : {type: Number, 
       index: true} 
     }], 
name : { type : String, 
     uppercase: true, 
     index: true} 
+0

Pouvez-vous console.log 'res.body' pour que je puisse voir de quoi vous obtenez la longueur? –

+0

Oh, je n'ai pas assez de réputation pour poster des images, mais un fichier console.log (res.body) renvoie un json avec 3061 objets. comme ceci: _ [Objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet, objet , Objet, Objet, Objet, Objet, Objet, Objet, Objet, Objet, Objet ...] _ – LorD

+0

Vous n'avez pas besoin de prendre une image de quoi que ce soit. Copiez simplement l'objet qui est enregistré lorsque vous conservez console.log (res.body) dans votre question d'origine ici. N'oubliez pas d'utiliser la mise en surbrillance du texte du code comme vous l'avez fait avec le reste du code dans votre question. –

Répondre

2

Vous devez transmettre done à votre rappel it car chai.request('http://localhost:8080').get() est asynchrone. Sans cela, vous essayez d'exécuter une assertion après la fin de it. En d'autres termes, vous devez indiquer à it d'attendre la fin de la requête HTTP. Remarque, j'utilise quelques es6. Remplace mes flèches par des fonctions de rappel si ton projet ne supporte pas es6.

it('should have a length of 3061', done => { 
    chai.request('http://localhost:8080') 
    .get('/api/pac/') 
    .end((err, res) => { 
     if (err) done(err); 

     expect(res.body).to.have.lengthOf(3061); 
     done(); 
    }); 
}); 
0

Que diriez-vous:

expect(res.body.length).to.equal(3061); 

peut se rappeler si elle est .equal ou .be mais un de ceux-ci devraient travailler.

+1

erreur persiste: Uncaught TypeError: Impossible de lire la propriété 'corps' de indéfini – LorD

+0

Cela ne peut pas corriger l'erreur signalée par l'OP. Si l'expression 'res.body' dans' expect() 'provoque" Impossible de lire la propriété 'body' de undefined "(qui est une erreur déclenchée par la machine virtuelle JavaScript, pas par Chai), alors l'expression' res.body. length' provoquera nécessairement la même erreur. – Louis

+0

Oh, vous avez raison. Je ne regardais que la moitié de l'erreur. Mon erreur! –