2017-03-02 3 views
0

Ich habe den folgenden Unit-Test mit Chai, aber auch wenn ich den Endpunkt den Unit-Test übergibt. Ich weiß nicht, wie das möglich ist?Unit-Test mit Chai

var chai = require('chai'); 
    var chaiHttp = require('chai-http'); 
    var mongoose = require('mongoose'); 
    var server = require('./index.js'); 

    var should = chai.should(); 
    chai.use(chaiHttp); 

    var agent = chai.request.agent(server.app); 
    var Cookies; 

    describe('integration tests for server component', function() { 

     before(function (done) { 
     //mongoose.createConnection('mongodb://someserver'); 
     chai.request(server.app) 
      .post('/user/login') 
      .send({email:'[email protected]'}) 
      .end(function(err, res){ 
      res.should.have.status(200); 
      Cookies = res.headers['set-cookie'].pop().split(';')[0]; 
      }); 
     done(); 
     }); 
it('should GET /user/loggedin with status 200', function(done) { 
    chai.request(server.app) 
     .get('/user/loggedin') 
     .end(function(err, res){ 
     res.should.have.status(200); 
     }); 

    done(); 
    }); 

    it('should POST /user/isregistered with status 200', function(done) { 
    var user = { 
     email: '[email protected]' 
    }; 
    chai.request(server.app) 
     .post('/user/isregistered') 
     .send(user) 
     .end(function(err, res){ 
     res.should.have.status(200); 
     }); 
    done(); 
    }); 

    it('should GET /allskills', function(done){ 
    chai.request(server.app) 
    .get('/user/allskills') 
    .end(function(err, res){ 
     err.to.be.null; 
     res.to.have.status(200); 
     res.should.be.json; 
     res.body[0].to.have.property('_id'); 
     res.body[0].to.have.property('name'); 
    }); 
    done(); 

    }); 

Ist dies der richtige Weg, Unit-Tests mit Chai zu machen?

Der Zweck des Vorher ist es, eine Sitzung an Ort und Stelle zu haben. in der es aber ich denke, ich eine Sitzung direkt, ohne jeden Anruf zu /user/login

+3

Sie müssen 'done' innerhalb des an 'end' übergebenen Callbacks aufrufen, sonst teilen Sie Mocha vorzeitig mit, dass der Test abgeschlossen ist. – robertklep

+0

oooooooooooooooohhhhhhh danke. – user3450754

Antwort

0

Wie @robertklep wies darauf hin, sollten Sie innerhalb der Rückrufe end() die Erwartungen nach dem Handeln gegeben done() schaffen sollte.

Aufgrund der Art der asynchronen Anforderung wurde done() aufgerufen, bevor die Antwort eintraf. Stellen Sie sicher, dass Sie immer sofort done() anrufen, nachdem die Erwartungen in Ihnen erfüllt sind, wenn die Anforderung erfüllt ist.