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
答案 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应该正确响应的所有变体。