2015-11-13 70 views
0

我有一个测试是在一个残缺的方法上进行间谍活动。该方法伪造一个依赖项。我可以验证方法实际上是否被调用。我甚至可以通过预期的参数验证它是否被调用。但是,在查看calledcalledWith时,间谍未提供truesinon.spy(func)即使在调用时也不会产生调用

这是代理mailer依赖关系的mailerStub方法。

我甚至已经为spy.displayName和它的mailer放置console.log预期。

我在这里做错了什么?

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

回答

0

为了帮助未来的某个人,我想出了这个问题。需要使用该功能设置存根,然后将存根需要注入proxyquire配置中。

这很可能是因为它不是我正在观看的object.func而是现有的功能。

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; 
function mailerStub(to, subject, html, callback) { 
    callback(mailerErr); 
} 
var mailerStubSpy = sinon.spy(mailerStub); 

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': mailerStubSpy, 
    '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'; 

    sut(req, res, next); 

    function next(msg) { 
     expect(msg).to.be.false; 
     expect(mailerStubSpy.called).to.be.true; 
     //expect(spy.calledWith(res.email.to, res.email.subject, templateHtml)).to.be.true; 

     done(); 
    } 
    }); 
}); 
相关问题