MochaとSinonを使用して、node.js モジュールの単体テストを行っています。私は他の依存関係 (私が書いた他のモジュール) を正常にモックしましたが、純粋でない関数 (Math.random()
や などDate.now()
) をスタブ化する際に問題が発生しました。私は次のことを試しました(この質問があまりローカライズされないように簡略化されています)がMath.random()
、明らかなスコープの問題のためにスタブ化されませんでした。のインスタンスはMath
、テスト ファイルと の間で独立していますmymodule.js
。
test.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()
このシナリオでシノンとスタブすることは可能ですか?