在需要的时候,扼杀/嘲笑一个返回函数的库

所以我试图嘲弄或存根电话咆哮图书馆。 当需要的时候,它会返回一个函数,当被调用时会触发一个咆哮通知。 我无法弄清楚如何在我的testing中模拟或者删除它。

这是我迄今为止所尝试的:

/* /lib/some_code.js */ var growl = require('growl'); exports.some_func = function() { growl('A message', { title: 'Title' }); }; 

(注:我使用sinon-chai来expression我的观点)

 /* /test/some_code.js */ var growl = require('growl') , some_code = require('../lib/some_code'); describe('Some code', function() { it('sends a growl notification', function(done) { var growlStub = sinon.stub(growl); some_code.some_func(); growlStub.should.have.been.called; done(); }); }); 

所以我想出了一个似乎可行的解决scheme,虽然我个人觉得它有点不洁。

被testing的代码只需要导出它对咆哮的依赖,并使用内部导出的函数。

 // Code under test exports.growl = require('growl'); exports.some_func = function() { exports.growl('message', { title: 'Title' }); }; // Test var some_code = require('../lib/some_code'); describe('Some code', function() { it('sends a growl notification', function(done) { var growlStub = sinon.stub(some_code, 'growl'); some_code.some_func(); growlStub.should.have.been.called; done(); }); }); 

如果有人有更好的解决scheme,我很乐意看到它。