コントローラがあり、これにはRestクライアントAPIコールを呼び出すpost_review
アクションがあります。 document_manual_result
Rails webmock localhost API呼び出しをスタブアウト
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
ロギング方法であり、delete_relavent_review_queue
は、アイテムが削除されたコールバック型の方法です。
post_reviewアクションの副作用をテストしている、つまり結果(別名: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
オンが、今その残りのクライアントは、それが仕様を破っている実行される前に。 私はコントローラのアクションの一部だけをrest_client.execute
でスタブしたいので、メソッドの他の副作用をテストできます。私はそれが指しているURLがlocalhost:3001
ので、私が試している:
stub_request(:any, "localhost:3001")
私は、内の何もしなかった私の前のブロックを、それを使用して、私は実際の試験の内側それを試してみました、それはブロックだけ私の前にはpost :post_review, @params
とWebmockは何もしていないようです。私はwebmockは、特定のURLに対して行われているリクエストを聞いており、デフォルトで成功したか、指定したオプションのブロックを返すということです。私はこれを正しく使用しているかどうかわかりません。このスニペットで
まさにそれで、私はちょうど今、私のテストの緑を得ました。私は、 'stub_request(:any、" localhost:3001 ")'がすべてのルートをカバーするグローバルなカバーのようになると考えました。しかし、あなたはユーバー固有のものでなければなりません。 +1のおかげ。 – TheLegend
@TheLegendあなたもそれを行うことができます、私は私の答えを更新しました – Josh