J'ai un test espionnage sur une méthode stubbed out. La méthode simule une dépendance. Je peux vérifier que la méthode est en train d'être appelée. Je peux même vérifier qu'il est appelé avec les arguments attendus. Cependant, l'espion ne fournit pas un true
en regardant called
ou calledWith
.sinon.spy (func) ne produit pas un appelé même quand il est appelé
C'est la méthode mailerStub
qui utilise la dépendance mailer
par proxy.
J'ai même placé un console.log
pour le spy.displayName
et c'est mailer
comme prévu.
Qu'est-ce que j'ai fait de mal ici?
var proxyquire = require('proxyquire');
var expect = require('chai').expect;
var sinon = require('sinon');
var mockReq = require('./../mockReq');
var mockRes = require('./../mockRes');
var utils = require('./../utils');
var config = require('./../../server-config');
var mailerErr;
var mailerTemplate;
var mailerStub = function mailer(to, subject, html, callback) {
callback(mailerErr);
};
var emailTemplatesErr;
var templateErr;
var templateHtml;
var emailTemplatesStub = function emailTemplates(root, callback) {
callback(emailTemplatesErr, function template(name, locals, callback) {
callback(templateErr, templateHtml);
})
};
var sut = proxyquire('./../../middleware/sendEmail', {
'../mailer': mailerStub,
'email-templates': emailTemplatesStub
});
describe('middleware/sendEmail', function sendEmailSpec() {
beforeEach(function() {
mailerErr = false;
mailerTemplate = undefined;
emailTemplatesErr = false;
templateErr = false;
templateHtml = undefined;
});
it('should send an email', function(done) {
var req = new mockReq();
var res = new mockRes(next);
res.email = {
templateName: 'template-name',
to: '[email protected]',
subject: 'some subject',
locals: {
firstName: 'test'
}
};
templateHtml = 'HTML';
var spy = sinon.spy(mailerStub);
sut(req, res, next);
function next(msg) {
console.log(spy.displayName);
expect(msg).to.be.false;
expect(spy.called).to.be.true;
//expect(spy.calledWith(res.email.to, res.email.subject, templateHtml)).to.be.true;
done();
}
});
});