我正在使用Mocha和Sinon对我的 node.js 模块进行单元测试。我已经成功地模拟了其他依赖项(我编写的其他模块),但是我遇到了存根非纯函数(如Math.random()
和Date.now()
)的问题。我已经尝试了以下方法(已简化,以便这个问题没有那么本地化),但Math.random()
由于明显的范围问题而没有被存根。的实例Math
在测试文件和mymodule.js
.
测试.js
var sinon = require('sinon'),
mymodule = require('./mymodule.js'),
other = require('./other.js');
describe('MyModule', function() {
describe('funcThatDependsOnRandom', function() {
it('should call other.otherFunc with a random num when no num provided', function() {
sinon.mock(other).expects('otherFunc').withArgs(0.5).once();
sinon.stub(Math, 'random').returns(0.5);
funcThatDependsOnRandom(); // called with no args, so should call
// other.otherFunc with random num
other.verify(); // ensure expectation has been met
});
});
});
所以在这个人为的例子中,functThatDependsOnRandom()
看起来像:
mymodule.js
var other = require('./other.js');
function funcThatDependsOnRandom(num) {
if(typeof num === 'undefined') num = Math.random();
return other.otherFunc(num);
}
Math.random()
在这种情况下可以用诗乃存根吗?