2013-04-12 13 views
13

私は、レール3アプリケーションをタイムゾーンを使用できる状態にすることに取り組んでいます。私の開発マシンはEDTにあり、私がホストしているサーバーはUTCです。私のrspecテストで、ルビーが使用しているシステムのタイムゾーンを変更する方法がありますので、私は自分のコンピュータのシステムクロックを変更することなく同じシステムタイムゾーンを使ってテストを実行していますか?私はDeloreanとTimecopを調べました。彼らは私が探しているものではありません。私はシステムクロックを変更せずにrspecテストでシステム時間を設定する

Time.system_time_zone = "UTC" 

ような何かを探しています...そしてTime.nowは私のシステムのタイムゾーンに設定されているものの代わりにUTC時刻を返します。詳細については、http://api.rubyonrails.org/classes/Time.html#method-c-zone-3Dを見に

Time.zone = "UTC" 

答えて

10
before {Time.stub(:now) {Time.now.utc}} 

これで、どこでもTime.nowがあなたのテストで呼び出されると、システムの時刻がUTCで返されます。

例:

describe Time do 
    before {Time.stub(:now) {Time.now.utc}} 

    it "returns utc as my system's time" do 
    Time.now.utc?.should be_true 
    end 
end 
+1

チャールズさん、ありがとうございました。よりグローバルな環境があることを期待していましたが、これは私が必要とするものです。 –

+0

正確にそれを行う宝石を持っているといいです... –

+1

@JoshuaMuheim私は[TimeCop](https://github.com/travisjeffery/timecop)gemがこれを行うと信じています。 –

-1

Railsは、あなたが探しているものを正確に提供します。

+1

これは私が求めていたものを行いません。これは、Time.zoneを通過してTime.zoneで指定されたタイムゾーンに物を入れるときに、レールに指示します。あなたがTime.nowを使用するときには、UTCで時刻を返すようにしています。 –

+0

右、 'Time.now.now'または' Time.now'の代わりに 'Time.current'を呼び出す必要があります。 – CubaLibre

+0

しかし、私の質問の全体的な考え方は、テストでシステム時間をUTCに設定することでした。あなたの解決策がしているのは、レールが 'Time.zone'を通じてすべての時間をUTCに変換するように指示することです。 「Time.now」を実行すると、システム指定のタイムゾーンで時間が与えられます。チャールズの解決策はこれだけです。 –

関連する問題