2017-08-23 2 views
0

Voici le test en cours:Mocha Chai Tests passe Buth ne devrait pas

describe('/POST Register Page', function() { 
    it('it should register new user', function(/*done*/) { 
     chai.request(server) 
     .post('/auth/register') 
     .send(new_user_data) 
     .end(function(res) { 
      expect(res).to.have.status(2017); 
      // done(); 
     }) 
    }) 
    }) 

Le dernier que j'ai vérifié, il n'y a pas de code http comme 2017, cependant, il passe encore:

Registration 
    Get register page 
GET /auth/register 200 6.989 ms - 27 
     ✓ it should get register page 
    /POST Register Page 
     ✓ it should register new user 


    2 passing (147ms) 

Je veux simplement poster quelque chose, puis obtenir une réponse et jouer avec la réponse.

Si j'inclus le done(), je reçois l'erreur de délai d'attente:

1) Registration /POST Register Page it should register new user: 
    Error: Timeout of 3000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

Je ne peux pas trouver quelque chose à travailler, comme pour se tromper ou à droite, passer les tests.

Bien que cette demande get passe comme prévu:

describe('Get register page', function() { 
    it('it should get register page', function(done) { 
     chai.request(server) 
     .get('/auth/register') 
     .end(function(err, res) { 
      expect(err).to.be.null; 
      expect(res).to.have.status(200); 
      done(); 
     }) 
    }) 
    }) 

Je suis novice en la matière mocha-cum-chai-chai-http chose, et l'expérience à ce jour est bizarre.

Merci.

+0

Si vous prévoyez de ne pas utiliser la fonction de rappel 'de done' (et si vous avez des promesses que vous ne devriez pas) puis juste revenir' chai.request'. Assurez-vous simplement que la fonctionnalité ['Promise'] (https://github.com/chaijs/chai-http#dealing-with-the-response---promises) est activée. – MarcoL

Répondre

1

Votre requête POST prend probablement plus de 3 secondes pour se terminer, par conséquent moka renvoie l'erreur de délai.

Vous pouvez régler le délai d'attente à une plus grande valeur comme:

describe('/POST Register Page', function() { 
    // timeout in milliseconds 
    this.timeout(15000); 

    // test case 
    it('it should register new user', function(done) { 
    chai.request(server) 
     .post('/auth/register') 
     .send(new_user_data) 
     .end(function(res) { 
     expect(res).to.have.status(200); 
     done(); 
     }) 
    }) 
}) 

Avec quelques essais, vous pouvez trouver une valeur optimale de délai pour définir dans vos tests. Lorsque vous n'utilisez pas le rappel done(), le moka ignore simplement les assertions sans attendre l'arrivée de la réponse. Puisque les assertions dans le bloc .end() ne sont jamais exécutées, mocha passe le test car il ne fait face à aucune assertion. J'avais fait face à quelque chose de similaire quand j'ai commencé avec TDD, que j'ai appris à propos de la façon dure.

Reference:

Because the end function is passed a callback, assertions are run asynchronously. Therefore, a mechanism must be used to notify the testing framework that the callback has completed. Otherwise, the test will pass before the assertions are checked.