2016-06-04 42 views
5

kod do testowaniaJednostka Funkcja testowa, która zwraca Mongoose obiecują

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 
     } 
    }); 
}); 

testów jednostkowych

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(); 
     }); 
}); 

test dostaje miarę powrotnej user.save() razy potem na zewnątrz. Wygląda na to, że brakuje mi czegoś w testach jednostkowych, ale nie zgłoszono błędu. Używam obiecanego przez siebie grzechu, aby rozwiązać obietnicę, ale wydaje się, że to nie widzi.

Odpowiedz

2

Wygląda na mało prawdopodobne, że celowo pominąłbyś wywołanie res.send() w kodzie przykładowym ze względu na zwięzłość.

Tylko po to, aby przywrócić kod stanu 200 po wywołaniu funkcji userCreate w routerze?

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

gdy userCreate jest trafiony z klientem spoczynku to działa bez zarzutu I wykluczona odpowiedź dla jasności, ale test nie jest osiągnięciem po powrocie funkcji userCreate.then ' – mattwilsn