2016-08-23 36 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 

声明:此代码未经测试,因为我无法访问实际的应用程序。