0

時間に敏感なテスト ケースのテストに TimeCop Gem を使用しています。lib ディレクトリに 1 つのファイルがあります。文字列定数だけが含まれています。

例。

module DateStr
   SAMPLE = "Some date #{Date.current}"
end

私のキュウリのテスト ケースでは、コードのこの部分はモック タイムを取得しません。システム時刻を選択します。何故ですか?

4

1 に答える 1

1

DateStrロードされると、SAMPLE定数が作成され、存在する日付が割り当てられました。

定数は変更されることが想定されていないため、これは定数の間違った使用例であると言えます。

編集。

この動作には定数を使用しません。ハックな方法は、ラムダを使用することです。

module DateStr
   SAMPLE = -> {"Some date #{Date.current}"}
end
DateStr::SAMPLE.call # This will evaluate to current date

しかし、これは適切な使用例ではありません。値自体が定数ではないためです。代わりに、この種の動作には単純なクラス メソッドを使用する必要があります。

module DateStr
   def self.sample
     "Some date #{Date.current}"
   end
end
于 2015-10-13T06:55:29.467 に答える