2015-11-13 69 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(); 
    } 
    }); 
}); 
相關問題