現在時刻取得のところmomentを使ってるけど、テスト書くときは固定値になって欲しいよねというところのめも。
momentを使っているクラスがこんなんだとして、
'use strict'; const moment = require('moment'); module.exports = class Foo { static get unixtime() { return moment().unix(); } };
stubでスタブを作る場合はstub()の第一引数にはmomentではなくて、moment.fnを渡す。
'use strict'; const sinon = require('sinon'); const moment = require('moment'); const Foo = require('./foo'); const stub = sinon.stub(moment.fn, 'unix'); stub.onCall(0).returns(1475819617); stub.onCall(1).returns(1475819617 + 10); stub.returns(1475819617 + 20); for (let i = 0; i < 5; i++) { console.log(`${i}: ${Foo.unixtime}`); } stub.restore(); console.log(`restored: ${Foo.unixtime}`);
実行結果
masami@arch moment_stub$ node ./test.js 0: 1475819617 1: 1475819627 2: 1475819637 3: 1475819637 4: 1475819637 restored: 1475820545
( ´ー`)フゥー...
JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
- 作者: クジラ飛行机
- 出版社/メーカー: ソシム
- 発売日: 2015/08/31
- メディア: 単行本
- この商品を含むブログ (2件) を見る