Ruby on rails Rspec将视图参数传递给控制器规范

Ruby on rails Rspec将视图参数传递给控制器规范,ruby-on-rails,rspec,rspec-rails,Ruby On Rails,Rspec,Rspec Rails,我的问题是,我试图通过使用rspec获得尽可能多的覆盖率,但我无法测试某些行。我试图将params散列传递给我的rspec中的controller方法,以模拟视图中的值。基本上,这些值将过滤显示在我的索引页面上的结果 我正在测试的控制器方法是: def index @buildings = Building.all @buildings = @buildings.searchaddress(params[:searchaddress]) if params[:searchcompany]

我的问题是,我试图通过使用rspec获得尽可能多的覆盖率,但我无法测试某些行。我试图将params散列传递给我的rspec中的controller方法,以模拟视图中的值。基本上,这些值将过滤显示在我的索引页面上的结果

我正在测试的控制器方法是:

 def index
@buildings = Building.all

@buildings = @buildings.searchaddress(params[:searchaddress])


if params[:searchcompany] != nil
  @buildings = @buildings.searchcompany(params[:searchcompany][:management])
end

if params[:searchcompany] != nil
  @buildings = @buildings.searchcity(params[:searchcity][:city])
end

if params[:searchparking] == 'on'
  params[:searchparking] = 't'
  @buildings = @buildings.searchparking(params[:searchparking])
end

if params[:searchpets] != nil 
  params[:searchpets] = 't'
  @buildings = @buildings.searchpets(params[:searchpets])
end
结束

我正在尝试通过rspec测试中的参数哈希。我尝试了几种方法,包括这一种:

describe "viewing all buildings" do
    it "renders index template" do

        param = Hash.new()
        param[:searchcompany] = [management:'asdf']
        param[:searchcity] = [city:'asdf']    #have also tried {city:""}
        param[:searchparking] = ['on']
        param[:searchpets] = [true]
        param[:searchaddress] = ['lalala']

        get :index, params:param #{searchcompany:{management:'asdf'}, searchcity:{city:'asdf'}, searchparking:'on', searchpets:true}
        expect(response).to render_template('index')
        expect(assigns(:buildings)).to be_truthy


        expect(Building).to receive(Building.searchcompany)
        expect(Building).to receive(Building.searchcity)
        expect(Building).to receive(Building.searchpets)
        expect(Building).to receive(Building.searchparking)
    end
   end
searchpets、searchcompany等方法来自我的建筑模型,并按如下方式实现

def self.searchaddress(search)
where("address LIKE ?", "%#{search}%") 
end
以下是我得到的错误:

 1) BuildingsController viewing all buildings renders index template
 Failure/Error:
   def self.searchcity(search)
     where("city LIKE ?", "%#{search}%")

 ArgumentError:
   wrong number of arguments (0 for 1)
 # ./app/models/building.rb:39:in `searchcity'
 # ./spec/controllers/buildings_controller_spec.rb:103:in `block (3 levels) in <top (required)>'
1)BuildingController查看所有建筑物渲染索引模板
失败/错误:
定义self.searchcity(搜索)
何处(“城市式?”,“%#{search}%”)
参数错误:
参数数目错误(0表示1)
#/app/models/building.rb:39:in'searchcity'
#./spec/controller/buildings\u controller\u spec.rb:103:in'block(3层)in'
如何通过rspec测试将[:searchcity][:city]传递给我的控制器方法?

您可以尝试:

 it "renders index template" do
    params = {
      searchcompany: {
        management: 'asdf'
      },
      searchcity: {
        city: 'asdf'
      },
      searchparking: 'on'
    }
    # All your expectations like 'expect(sth).to receive(:method)' go here
    get :index, params
    # Your remaining expectations go here
 end