如何为无法通过GET访问的控制器方法编写RSpec并使用参数?

时间:2015-07-06 06:22:57

标签: ruby-on-rails rspec

def method1
   if params[:hotel].present?
   end
end

def method2 //accessed via GET
    @hotel = params[:hotel]
    method1
end

所以,现在我想为method1编写一个RSpec测试。如何预设params变量?为了清楚起见,我不能写

get :'method1', request_params

1 个答案:

答案 0 :(得分:1)

你可以自己设置params并在控制器上调用方法,例如:

expect(@controller).to receive(:params).and_return(:hotel => "Sample Hotel")
expect(...) # your spec expectations here
expect(@controller.send(:method1)).to eq(expected_return_value)

如上所述,测试控制器的私有/非动作方法被认为不是最佳做法...

相反,您需要测试公共行为,并通过传递所有可能的变体并获得最终结果来测试您的私有方法是做正确的事情 - 例如,而不是专门测试方法1,你&#39 ;而是测试方法2,其中包含method1应该正确响应的所有变体。