У меня есть контроллер, который имеет действие post_review
, которое вызывает вызов API клиента клиента.Rails webmock stubbing localhost api call
def post_review
...
headers = { "CONTENT_TYPE" => "application/json",
"X_AUTH_SIG" => Rails.application.secrets[:platform_receiver_url][:token] }
rest_client.execute(:method => :put,
:url => Rails.application.secrets[:platform_receiver_url][:base_url] + response_body["application_id"].to_s,
:content_type => :json,
:payload => response_body.to_json,
:headers => headers)
document_manual_result(response_body)
delete_relavent_review_queue(params[:review_queue_id])
...
end
document_manual_result
является методом регистрации и delete_relavent_review_queue
является методом типа обратного вызова, который будет удалить элемент.
Я написал несколько тестов, которые проверяют побочные эффекты действия post_review, а именно, что он документирует, что я отправил результат (aka: response_body
) и что я удаляю другой объект.
describe "Approved#When manual decision is made" do
it "should delete the review queue object" do
e = Event.create!(application_id: @review_queue_application.id)
login_user @account
post :post_review, @params
expect{ReviewQueueApplication.find(@review_queue_application.id)}.to raise_exception(ActiveRecord::RecordNotFound)
end
it "should update the event created for the application" do
e = Event.create!(application_id: @review_queue_application.id)
login_user @account
post :post_review, @params
expect(Event.find(e.id).manual_result).to eq(@manual_result)
end
end
До того как я включил RestClient
тесты работали, но теперь, когда клиент остальное выполняет Это нарушает спецификации. Я хотел бы заглушить только часть действия контроллера, поэтому я могу проверить другие побочные эффекты метода. URL, он у меня указывая на это localhost:3001
поэтому я попытался:
stub_request(:any, "localhost:3001")
Я использовал его в течение, мой перед блок, который ничего не делал, и я попытался его в настоящем тесте это блок просто до I post :post_review, @params
и Webmock, кажется, ничего не делает. То, что я думал, что вебмок делает, заключается в том, что он слушает любые запросы, сделанные с определенным URL-адресом, и он возвращает успех по умолчанию или блок опций, которые вы указали. Я не уверен, что правильно использую это.
Именно это, я только что получил мой тест зеленый прямо сейчас. Я думал, что 'stub_request (: any," localhost: 3001 ")' будет похож на глобальную обложку по всем маршрутам. но, увы, вы должны быть более узкими. +1 спасибо бутон. – TheLegend
@ TheLegend, вы тоже можете это сделать, я обновил свой ответ – Josh