2017-10-23 24 views
0

私はNodeを使い始めています。私は今、いくつかの単体テストを書いています。最初のカップルの機能のために私はそれが正常に動作しているが、私は今それにmoment.utc()を含む関数にヒットしました。私の機能の簡略化されたバージョンは、次のようになります。その結果(これが実行される時間ので単体テストのためにmoment.utc()をモックする方法は?

"use strict"; 
const assert = require('assert'); 
let positions = [{this: 'is', a: 'very', large: 'object'}]; 
assert.strictEqual(calculate_x(positions, 1.8), 1.5); 

と:

function calculate_x(positions, risk_free_interest){ 
    let x = 0; 
    for (let position of positions) { 
     let expiry_in_years = get_expire_in_years(moment.utc()); 
     if (expiry_in_years > 0){ 
      let pos_x = tools.get_x(expiry_in_years, risk_free_interest); 
      x += pos_x; 
     } 
    } 

    return x; 
} 

は、私は基本的なノードアサートテストのlibを使用してこれをテストしてみてください)は常に異なっていて、これは常に失敗します。

Pythonではモッククラスとオブジェクトを設定できます。 calculate_x()関数の引数としてmoment.utc()を与えずにNodeでこの問題を解決できる方法はありますか?

+2

[時間ソースを変更する](http://momentjs.com/docs/#/customization/now/)のようなものが必要ですか? – VincenzoC

+0

sinonは、ノードのための素晴らしいテストライブラリespです、あなたもそこにタイマーを模倣する/変更することができますhttp://sinonjs.org/releases/v4.0.1/fake-timers/ –

+0

@ VincenzoC - 恐ろしい!正確に私が必要なもの!あなたが答えとしてあなたのコメントを追加するなら、私はそれを受け入れることができます。 – kramer65

答えて

1

瞬間は、あなたがその瞬間を見ている時間を変更したい場合は、Unixエポック(1970年1月1日)からのミリ秒数を返すメソッドを指定することができ、あなたにChange Time Source

をすることができます。

デフォルトは次のとおりです。

moment.now = function() { 
    return +new Date(); 
} 

この

moment()を呼び出すときに使用され、トークンが format()から省略された場合、現在の日付が使用されます。一般的に、現在の時間を必要とする方法は、これをフードの下で使用します。

コードmoment.utc()を実行すると、moment.nowを再定義してカスタム出力を得ることができます。

関連する問題