javascript – 对需要时返回函数的库进行存根/模拟

所以我试图模拟或存根调用 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();
  });
});

如果有人有更好的解决方案,我很乐意看到它.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...