2016-08-23 5 views
0

私はRSpecを初めて使い、コントローラーのif-else条件をテストしたいが、インターネットで検索したが、見つかった結果が検索クエリを正しく満たしていない。rspecのelse条件があるかどうかをテストする方法

はここに私のレールコントローラです:

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 

私はルビーバージョン2.2.4を使用していますし、バージョンが4.2.0

は、どのように私は、この条件のためにRSpecのを書くのですかという私を導いてくださいあるレール、例の助けを借りて

ありがとうございます。

+0

あなたの条件はparamsによって異なりますので、それぞれのテストシナリオで一度正しいと次に間違ったパラメータを渡すことでif - else条件を確認できます。 – Navin

+0

コントローラのコードが不完全なので、コード全体を添付して、適切なテストを書くことができます。 – amingilani

+0

@amingilani私は今、完全なコードを追加しました、今私に答える。 この例は、例を挙げて説明することができます。 –

答えて

2

コントローラ用に2つのテストを実行する必要があります。 1回のパスでは今日の日付、そうでないものは応答をテストします。ここでは:

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 

免責事項:私は実際のアプリケーションにアクセスできないため、このコードはテストされていません。

関連する問題