2016-08-23 66 views
0

我是RSpec的新手,我想測試控制器的if-else條件,我在網上搜索但找到的結果不能很好地滿足我的搜索查詢。如何測試是否其他條件rspec

這裏是我的軌控制器:

class ScheduleTimeSlotsController < ApplicationController 
    def get_available_schedules 
    if params[:for_date].to_date==Date.today 
     available_schedules=ScheduleTimeSlot.where(:doctor_id => params[:dr_id],:date=>params[:for_date].to_date,:status=>"vacant",:archive=>false).where("start_time >=?",Time.now.seconds_since_midnight).reorder(:start_time) 
    else 
     available_schedules=ScheduleTimeSlot.where(:doctor_id => params[:dr_id],:date=>params[:for_date].to_date,:status=>"vacant",:archive=>false).reorder(:start_time) 
    end 
    render :json =>{:available_schedules=>available_schedules} 
    end 
end 

我使用Ruby 2.2.4版和軌道的版本是4.2.0

請指引我,我怎麼寫RSpec的這種狀況,在一個例子的幫助下。

在此先感謝。

+0

您的條件取決於參數,因此您可以通過正確傳遞參數並在下次不正確的情況下檢查您的if-else條件。 – Navin

+0

您的控制器代碼不完整,請附上整個代碼,然後纔能有人能夠編寫相應的測試。 – amingilani

+0

@amingilani我現在添加了完整的代碼,現在回答我。 你可以通過任何例子來解釋這種情況。 –

回答

2

您需要爲您的控制器運行兩個測試。在一個通過一個今天的日期,一個不是並測試響應。這裏:

require 'rails_helper' 

RSpec.describe ScheduleTimeSlotsController, type: :controller do 
    describe 'GET #get_available_schedules when for_date is today' do 
    it 'returns http success' do 

    for_date = Date.today 
    available_schedules = ScheduleTimeSlot.where(
     doctor_id: params[:dr_id], 
     date: params[:for_date].to_date, 
     status: 'vacant', 
     archive: false 
    ).where(
     'start_time >=?', 
     Time.now.seconds_since_midnight 
    ).reorder(:start_time) 

     get 'get_available_schedules', for_date: for_date 
     expect(response.body.available_schedules).to eq(available_schedules) 
    end 
    end 

    describe 'GET #get_available_schedules when for_date is not today' do 
    it 'returns http success' do 

    for_date = Date.yesterday 
    available_schedules = ScheduleTimeSlot.where(
     doctor_id: params[:dr_id], date: params[:for_date].to_date, 
     status: 'vacant', 
     archive: false 
    ).reorder(:start_time) 

     get 'get_available_schedules', for_date: for_date 
     expect(response.body.available_schedules).to eq(available_schedules) 
    end 
    end 
end 

聲明:此代碼未經測試,因爲我無法訪問實際的應用程序。

相關問題