2017-01-20 5 views
1

このコードをテストしました。私のレールアプリの中のapplication_helperの内部。RSpec 3.5でこのコードをテストするには?

def greet 
    now = Time.now 
    today = Date.today.to_time 

    morning = today.beginning_of_day 
    noon = today.noon 
    evening = today.change(hour: 17) 
    night = today.change(hour: 20) 
    tomorrow = today.tomorrow 

    if (morning..noon).cover? now 
    'Good Morning' 
    elsif (noon..evening).cover? now 
    'Good Afternoon' 
    elsif (evening..night).cover? now 
    'Good Evening' 
    end 
end 

答えて

1

Timecop gemを使用して時間ベースのコードをテストすることをおすすめします。ヘルプヘルパーの一般的なドキュメントについては、RSpec documentationを参照してください。

あなたはこのような何か書くことができます:ここで何が起こっている

RSpec.describe ApplicationHelper, type: :helper do 
    describe '#greet' do 
    subject { helper.greet } 

    context 'in the morning' do 
     around do |example| 
     Timecop.travel(Time.now.change(hour: 2), &example) 
     end 

     it { is_expected.to eq('Good Morning') } 
    end 
    end 
end 

aroundブロックは、(すなわち、特定の時間をシミュレート)「の時間に戻って旅」にtimecopを呼び出し例とリターンを実行するということです後で定期的な行動に戻る。 Timecopを使用する場合は、元の時間に戻ることを忘れないようにする必要があります。したがって、aroundブロックを使用することをお勧めします。

関連する問題