2017-02-20 18 views
0

ImageManager.check_enable_timerspec; Как проверить эту функцию?

def check_enable_time 
    # get current time 
    now_time = Time.now 
    # UTC to JST convestion JST = UTC + 9 hours 
    hour = now_time.in_time_zone("Asia/Tokyo").hour 
    (hour != 23) ? true : false 

конец

Эта функция возвращает истину, если текущее время в JST! = 23 в противном случае возвращает ложь.

Я хочу проверить эту функцию.

Что я пробовал:

describe ImageManager do 
    describe "Test check_enable_time() function" do 
    context "When current time in JST != 23" do 
     it 'should return true' do 
     image_manager = ImageManager.new 
     result = image_manager.check_enable_time 
     result.should eql(true) 
     end 
    end 
    end 
end 

Как сделать now_time.in_time_zone("Asia/Tokyo").hour возвращение 23 и другие, чем 23?

Пожалуйста, помогите, я новичок в рельсах и rspec.

+0

Только у.е. rious - почему вы используете 'Time.now', а затем конвертируете в зону« Азия/Токио »? Вы знаете, что вы можете установить часовой пояс по умолчанию в настройках rails, а затем просто использовать 'Time.current' без преобразования? – MikDiet

+0

извините, я не знаю. Не могли бы вы рассказать мне, как это сделать? – RajSharma

+0

Вы можете начать с http://guides.rubyonrails.org/active_support_core_extensions.html#calculations и http://guides.rubyonrails.org/configuring.html#rails-general-configuration guide – MikDiet

ответ

0

Вы можете окурок текущее время с помощью Timecop перл:

it 'should return true' do 
    image_manager = ImageManager.new 
    Timecop.travel(Time.local(2008, 9, 1, 12, 0, 0)) do 
     result = image_manager.check_enable_time 
    end 
    result.should eql(true) 
    end 
+0

Для этой проблемы., Она работает нормально. Благодарю. – RajSharma

1

Решение, которое позволяет избежать установки другой драгоценный камень будет переписать существующий метод так, чтобы он не имеет явную зависимость от Time.now:

def check_enable_time(now_time = Time.now) 
    # UTC to JST convestion JST = UTC + 9 hours 
    hour = now_time.in_time_zone("Asia/Tokyo").hour 
    (hour != 23) ? true : false 
end 

тогда Вы можете проверить это путем пропускания в соответствующее время:

it 'should return true' do 
    image_manager = ImageManager.new 
    time = Time.local(2008, 9, 1, 12, 0, 0) 
    result = image_manager.check_enable_time(time) 

    result.should eql(true) 
end