Ich habe einen Controller, der eine post_review
Aktion hat, die einen Rest Client API-Aufruf aufruft.Rails webmock stubbing localhost api Anruf
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
Die document_manual_result
ist eine Logging-Methode und die delete_relavent_review_queue
ist eine Callback-Typ-Methode, die das Element gelöscht werden.
Ich habe mehrere Tests geschrieben, die die Nebenwirkungen der post_review-Aktion testen, nämlich dass es dokumentiert, dass ich das Ergebnis gesendet habe (aka: response_body
) und dass ich ein anderes Objekt lösche.
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
Vor drehte ich RestClient
auf die Tests gearbeitet, aber jetzt, dass Rest-Client ausgeführt wird Es ist die Spezifikationen zu brechen. Ich möchte nur den rest_client.execute
Teil der Controller-Aktion stubben, damit ich die anderen Nebenwirkungen der Methode testen kann. Die URL hat ich es zeigen localhost:3001
, ist so habe ich versucht:
stub_request(:any, "localhost:3001")
habe ich es in meinem vor Block, der nichts zu tun hat und ich versuchte, es in dem eigentlichen Test es Block nur vor mir post :post_review, @params
und Webmock scheint nichts zu tun. Was ich dachte webmock ist, dass es alle Anfragen an eine bestimmte URL abgehört und es gibt standardmäßig einen Erfolg oder einen Block von Optionen, die Sie angeben. Ich bin mir nicht sicher, ob ich das richtig benutze.
das genau ist es, ich habe gerade jetzt mein Test grün. Ich dachte, dass 'stub_request (: any," localhost: 3001 ")" wäre wie eine globale Abdeckung über alle Routen. aber ach, du musst sehr genau sein. +1 Dank Knospe. – TheLegend
@TheLegend können Sie das auch tun, habe ich meine Antwort aktualisiert – Josh