J'ai un contrôleur, qui a une action post_review
qui appelle un appel API Rest Client.Rails webmock décochant appel 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
Le document_manual_result
est un procédé d'enregistrement et la delete_relavent_review_queue
est un procédé de type de rappel qui permet de supprimer l'élément.
J'ai écrit plusieurs tests qui testent les effets secondaires de l'action post_review, à savoir qu'il documente que j'ai envoyé le résultat (aka: response_body
) et que je supprime un autre objet.
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
Avant allumé RestClient
les essais ont travaillé, mais maintenant que le client reste l'exécute se brise les spécifications. Je voudrais remplacer seulement la partie rest_client.execute
de l'action du contrôleur, afin que je puisse tester les autres effets secondaires de la méthode. L'URL que je l'ai pointe vers est localhost:3001
donc j'ai essayé:
stub_request(:any, "localhost:3001")
Je l'ai utilisé à l'intérieur, mon avant bloc qui ne fait rien et je l'ai essayé dans le test réel il bloc juste avant je post :post_review, @params
et Webmock semble ne rien faire. Ce que je pensais que webmock fait, c'est qu'il écoute toutes les demandes faites à une URL spécifique et il renvoie un succès par défaut ou un bloc d'options que vous spécifiez. Je ne suis pas sûr que je l'utilise correctement.
C'est exactement, je viens de recevoir mon vert de test maintenant. Je pensais que 'stub_request (: any," localhost: 3001 ")' serait comme une couverture globale sur toutes les routes. mais hélas, vous devez être plus précis. +1 merci bud. – TheLegend
@TheLegend vous pouvez le faire aussi, j'ai mis à jour ma réponse – Josh