2017-01-20 1 views
1

I nedd pour tester ce code. Son intérieur d'un application_helper dans mon application rails.Comment tester ce code avec 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 

Répondre

1

Je recommande d'utiliser la gemme Timecop pour tester le code temporel. Pour la documentation sur les aides de test en général, voir le RSpec documentation.

Vous pouvez écrire quelque chose comme ceci:

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 

Ce qui se passe ici est que le bloc around invoquera Timecop à « voyager dans le temps » (c.-à simuler un temps spécifique), exécutez l'exemple et le retour retour à un comportement régulier après. Lorsque vous utilisez Timecop, vous devez vous assurer de ne pas oublier de revenir à l'heure d'origine. Il est donc recommandé d'utiliser des blocs around.