RailsのRspecでRansack部分をテストしたいが、undefined method `[]' for nil:NilClassとエラーが出てしまいます
Rspecに関する質問です。
Ransackの動作がしっかり行われているかどうかを、Rspecテストのコードを書いているのですが、検索実行のシミュレーションの部分で
NoMethodError:
undefined method `[]' for nil:NilClass
と出ます。
ファイルは以下の通りです。
spec/controllers/master_costs_controller_spec.rb
require 'rails_helper'
describe MasterCostsController do
describe 'GET #index' do
context 'when master_costs searched' do
before do
create_list(:master_cost, 10) #検索用のデータ
end
specify do
@params[:q][:name_cont] = 'あああ' ###この行の[:name_cont]がおかしいと言われているのですが、どうしたら良いのかわかりません...検索パラメーターを受け取るために記述しているのですが.....
get :index, @params
expect(assigns(:master_costs)).to match_array([@data1])
end
end
end
end
spec/factories/master_costs.rb
FactoryGirl.define do
factory :master_cost do
sequence(:code)
sequence(:name) { |i| "MasterCostName#{ i }" }
cost_class { MasterCost.cost_classes.values.sample }
budger_class { MasterCost.budget_classes.values.sample }
@params = Hash.new,
@params[:q] = Hash.new
end
end
FactoryGirl.define do
before :each, class: MasterCost do
@data1 = create(:data, code: 1, name: 'あああ', cost_class: 1, budger_class: 'A')
@data2 = create(:data, code: 2, name: 'いいい', cost_class: 2, budger_class: 'AB')
@data3 = create(:data, code: 3, name: 'ううう', cost_class: 3, budger_class: 'A')
@params = Hash.new
@params[:q] = Hash.new
end
end
エラーログ
Failures:
1) MasterCostsController GET #index when master_costs searched
Failure/Error: @params[:q][:name_cont] = 'あああ'
NoMethodError:
undefined method `[]' for nil:NilClass
# ./spec/controllers/master_costs_controller_spec.rb:28:in `block (4 levels) in <top (required)>'
Finished in 0.37994 seconds (files took 9.51 seconds to load)
3 examples, 1 failure
Failed examples:
rspec ./spec/controllers/master_costs_controller_spec.rb:27 # MasterCostsController GET #index when master_costs searched
Randomized with seed 65361
お手数おかけしますが、わかる方いましたら少しのヒントでも嬉しいのでお力添え願います。
@params[:q][:name_cont] = 'あああ'の[:name_cont]がパラメータを受け取るにはどのように改善する必要があるのでしょうか??