javascript - Sinon spy with a Promise not being called -
the test (below) piece of code failing:
module.exports = function(user, jwt) { 'use strict'; return function(req, res) { user.create(req.body) .then(function(id) { var token = jwt.sign({id: id}); res.json({token: token}); }); }; };
here test:
'use strict'; var chai = require('chai'); var sinon = require('sinon'); require('sinon-as-promised'); chai.should(); chai.use(require('sinon-chai')); describe('routes/signup', function() { var user; var request; var response; var jwt; var signup; beforeeach(function() { user = {create: sinon.stub()}; request = {body: 'body'}; response = {json: sinon.spy()}; jwt = {sign: sinon.stub().withargs({id:'id'}).returns('token')}; signup = require('../../../routes/signup')(user, jwt); }); it('returns token when resolving', function() { user.create.resolves('id'); signup(request, response); return response.json.should.have.been.calledwith({token: 'token'}); }); });
if interrogate response.json method appears have never been called. response.args empty array.
i'm guessing i'm missing fundamental testing promises. help!
remember promises async, need wait until promise resolves , call then
method assertions. fr0609's answer give false positive because return before then
block ever called.
try this:
it('returns token when resolving', function(done) { user.create.resolves('id'); signup(request, response) .then(function() { response.json.should.have.been.calledwith({token: 'token'}); done(); }) .catch(done); });
Comments
Post a Comment