2015-08-21 1 views
0

Nouveauté pour les tests. Essayer de comprendre pourquoi moka passe ce test quand il devrait échouer.Pourquoi Mocha transmet-il cette requête https.get?

var assert  = require('assert'); 
var nock  = require('nock'); 
var https  = require('https'); 

describe('thing', function() { 
    describe('foo', function() { 
     it('makes the correct https call to API', function() { 
      nock('https://example.com') 
       .get('/foo') 
       .reply(404); 
      https.get('https://example.com/foo', function (response) { 
       console.log(response.statusCode); // returns 404 
       assert.equal(response.statusCode, 200); //passes 
      }); 
     }); 
    }); 
}); 

enter image description here

Répondre

2

Mocha, comme tout autre [correctement écrit] Node.js module/app, exécute de manière asynchrone hors de la boîte. Parce que votre appel https prend plus de temps à exécuter que le test Moka entier, Mocha n'a jamais une chance d'effectuer ses assertions avant que le processus se termine.

Cela dit, les tests de Mocha prend également en charge un rappel qui vous permettent d'exécuter des activités de longue durée avant d'effectuer vos affirmations:

var assert  = require('assert'); 
var nock  = require('nock'); 
var https  = require('https'); 

describe('thing', function() { 
    describe('foo', function() { 
     it('makes the correct https call to API', function (done) { 
      nock('https://example.com') 
       .get('/foo') 
       .reply(404); 
      https.get('https://example.com/foo', function (response) { 
       console.log(response.statusCode); // returns 404 
       assert.equal(response.statusCode, 200); //passes 
       done(); 
      }); 
     }); 
    }); 
}); 
+0

a obtenu. Merci pour la réponse rapide. Et avec cela, je suis ** fait ** pour la journée. – Blexy