2016-06-04 34 views
5

codice per verificarefunzione di Unit Test che restituisce Mongoose promettono

import { User } from '../models/no-sql/user'; 

function userCreate(req) { 
    const user = new User({ 
     username: req.username, 
     password: req.password 
    }); 

    return user.save(); 
} 

app.get('/userCreate', function(req, res) { 
    User.findOne({ username: req.username }).lean().exec((err, data) => { 
     if(data){ 
      userCreate(req).then(function() { 
       // success 
      }, function(err) { 
       // error 
      }); 
     }else{ 
     // no user found 
     } 
    }); 
}); 

unità di prova

require('sinon-as-promised'); 
    import request from 'supertest'; 

    const user = { 
     username: newUserName, 
     password: 'password' 
    }; 


    factory.build('user', user, function(err, userDocument) { 
     UserMock. 
      expects('findOne').withArgs(sinon.match.any) 
      .chain('lean') 
      .chain('exec') 
      .yields(null, undefined); 

     const docMock = sinon.mock(userDocument); 
     docMock.expects('save') 
     .resolves([]); 

     request(app) 
     .post('/userCreate') 
     .send({username: newUserName, password: 'password') 
     .expect(200) 
     .end((err, res) => { 
      if(err) done(err); 
      should.not.exist(err); 
      should.equal(res.body.success, true); 
      done(); 
     }); 
}); 

il test ottiene quanto user.save ritorno() quindi timeout. Sembra che manchi qualcosa nei test unitari, tuttavia non viene generato alcun errore. Sto usando sinon-come-promesso per risolvere la promessa ma non sembra vederlo.

risposta

2

Sembra improbabile che abbia deliberatamente omesso la chiamata res.send() nel codice di esempio per motivi di concisione.

Solo per essere sicuri, stai restituendo un codice di stato 200 quando la funzione userCreate chiamata nel router ha esito positivo?

userCreate(req).then(function() { 
    // success 
    res.status(200).send('User created successfully'); 
} 
+0

quando userCreate viene colpito con il cliente resto si sta lavorando bene ho escluso di risposta per chiarezza, ma il test non sta raggiungendo il ritorno dopo la funzione userCreate.then ' – mattwilsn