2012-01-05 10 views
9

と/偽の時間を凍結しない、私は私のコードでどのようにあなたはジャスミンBDD

new Date().getFullYear(); 

をこのようなラインを持っていると私はそれが常に同じ年返す必要があります。

ジャスミンでこれを行う方法はありますか?

ありがとうございました。

Date.prototype.getFullYear = function(){return 2012} 

あなたはまた、jasmine spy使用することができます:あなたは、単にあなたのテストのセットアップで機能を上書きすることができますJavaScriptでは

+1

他のクラスと同じようにDateインスタンスメソッドをスタブすることはできませんでしたか? –

+0

あなたはどうですか? – Cezar

+0

ドキュメントの例と同じですが、日付は代わりに使用できませんが、今はそれを試すことはできませんが、同じ方法で動作すると思います。 –

答えて

18

spyOn(Date, 'getFullYear').andReturn(2012) 

もう一つの方法は、あなたの機能をあなたにたいに日付を挿入することがありますテスト。どちらがbtwです。テスト可能なコードを書くための最良の方法です。関数に新しいインスタンスを作成しないでください。常にコードだけでなくこのインスタンスもテストするようになります。

+9

は、おそらく 'spyOn(Date.prototype、 'getFullYear')と.Return(2012)'でなければなりません。 –

+1

これは私のために働いた: 'spyOn(Date.prototype、 'getFullYear')and.returnValue(2012)' – Sam

+0

関数を上書きする場合は、オーバーロードされた関数が他のテストへのリーク、またはおそらくアプリケーションへのリークを引き起こします。 1. 'const originalGetFullYear = Date.prototype.getFullYear' 2.テストを行います。3.' Date.prototype.getFullYear = originalGetFullYear' –

2

Sinon.js偽のタイマー。

http://sinonjs.org/docs/#clock

私はタイミングコードをチェックするために私のスペックでこれを使ってNode.jsの中でドラムマシンを構築しました。しかし私はまた別のプロジェクトでそれを使っていました。私が望む年になるための唯一の方法は、ある特定の年を使うことでした。私は1969年を何らかの理由で考えています。私はそれがUnix時代の始まりだと思っています。

とにかく、それはほぼ1年前だったので、おそらく今修正しているはずです。

+0

Unix Timeは1970年1月1日に開始されました。木曜日だった。 :) – Rimian

+0

ドラムマシンはどこですか? – Exitos

関連する問題