あなたのチャレンジ
私はあなたのassignTimeSlots
機能をテストしている中、本当に興味を持っているものを想定しています。あなたが挑戦しているのは、関数の外で定義された変数oneDayAgo
に依存しているということです。これは、テストが実行され、コードがそのグローバルフィールドに依存していることを意味します。特にテストが実行されるたびに変更される現在の時刻を使用している場合は、困難になります。
依存性注入
あなたは、引数として関数にその変数を注入することによって、この問題を回避を得ることができます。これにより、テスト中の現在の時刻を制御することができます。あなたはもはやシステムクロックに結合されません。
例
[ジャスミンとモック日付コンストラクタ]の以下のテストされていないが、全体のポイントを取得する必要があります...
var assignTimeSlots = function(oneDayAgo, time) {
if (time < oneDayAgo)
beforeOneDay.push(time)
else
otherEvents.push(time)
}
it ('should be added to "beforeOneDay" if it is prior to yesterday', function() {
var oneDayAgo = new Date(2017, 1, 27, 13, 35);
var now = new Date(2017, 1, 28, 13, 36);
assignTimeSlots(now, oneDayAgo);
expect(beforeOneDay[0]).toBe(now);
expect(otherEvents.length).toBe(0);
});
可能な複製(http://stackoverflow.com/質問/ 26152796/mock-date-constructor-with-jasmine) – mikeapr4