У меня есть частный метод в контроллереRails контроллер тестирования частный метод с Params
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
так, что он либо принимает аргумент, или он будет использовать Params как этот def body_builder(review_queue_id = params[:review_queue_id])
, а затем в тесте controller.send(:body_builder, params)
, но я чувствую, что изменить код, чтобы сделать тест пройти неправильно, он должен просто проверить его как есть.
Как я могу получить параметры в контроллере, прежде чем отправлять частный метод?
Мое предложение состояло в том, чтобы на самом деле ЗВОНОТЬ точку входа RESTful с правильными параметрами. Если у вас есть поведение, которое должно произойти до того, как ваш метод body_builder может быть вызван, вы можете высмеивать и заглушить, чтобы передать исполнение по правильному пути. Затем вы помещаете ожидание в метод controller.body_builder, а не просто вызываете его. Я понимаю, что это тяжелее, чем просто вызов частного метода, но я всегда чувствовал, что если вы вызываете частные частные методы непосредственно в тестах, вы как бы выходите за пределы тестовой «песочницы» для этого объекта. – jaydel
@jaydel, я полностью понимаю, откуда вы пришли, единственная проблема заключается в тестировании фактического вызова в точку входа, так как он отключит действие «RestClient :: Request», которое уже проверено, я хочу предположить, что эта часть работает правильно, но строительство полезной нагрузки игнорируется, если мы добавим вещи в полезную нагрузку, которую она не ожидает, что она потерпит неудачу. – TheLegend
Да, я понимаю вашу озабоченность. Я не знаком с деталями этого конкретного поведения, но возможно ли издеваться над этой частью и собирать эту полезную нагрузку так, как вы хотите протестировать. Я бродил за пределами контекста, который я понимаю, и вы знаете это намного лучше, чем я, конечно. так что просто пища для размышлений – jaydel