我在控制器中有一个私有方法
private
def body_builder
review_queue = ReviewQueueApplication.where(id: params[:review_queue_id]).first
...
...
end
我想测试body_builder
方法,它是一个为剩余客户端api调用建立有效负载的方法。但它需要访问参数。
describe ReviewQueueApplicationsController, type: :controller do
describe "when calling the post_review action" do
it "should have the correct payload setup" do
@review_queue_application = ReviewQueueApplication.create!(application_id: 1)
params = ActionController::Parameters.new({ review_queue_id: @review_queue_application.id })
expect(controller.send(:body_builder)).to eq(nil)
end
end
end
如果我执行上述操作,它将发送body_builder
方法,但之后它会中断,因为没有正确设置参数,因为它们会调用该动作。
我总是可以为body_builder
方法创建一个条件参数,以便它接受一个参数,或者它将使用这个def body_builder(review_queue_id = params[:review_queue_id])
这样的参数然后在测试controller.send(:body_builder, params)
中,但是我觉得更改代码以使测试通过是错误的,它应该只是按原样测试它。
在将私有方法发送给控制器之前,如何将参数传入控制器?
答案 0 :(得分:2)
我认为你应该能够取代
@_params
与
controller.inspect
你应该好。 params只是控制器的一个属性(实际属性为{{1}},但有一些方法可以访问该ivar。尝试将{{1}}放在视图中。