所以我试图模拟或存根调用
growl库.必要时,它返回一个函数,该函数将在调用时触发growl通知.我无法弄清楚如何在我的测试中模拟或存根.
这是我到目前为止所尝试的:
/* /lib/some_code.js */ var growl = require('growl'); exports.some_func = function() { growl('A message',{ title: 'Title' }); };
(注意:我使用sinon-chai作为我的断言)
/* /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(); }); });
解决方法
所以我想出了一个似乎有效的解决方案,不过我个人觉得它有点不干净.
测试中的代码只需要导出它对growl的依赖,并在内部使用export中的函数.
// 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(done) { var growlStub = sinon.stub(some_code,'growl'); some_code.some_func(); growlStub.should.have.been.called; done(); }); });
如果有人有更好的解决方案,我很乐意看到它.