Rails webmock stubbing out localhost api call



我有一个控制器,该控制器具有post_review操作,该操作调用REST客户端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

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之前,测试有效,但是现在REST客户端正在执行它正在破坏规格。我只想将控制器操作的rest_client.execute部分存根,因此我可以测试该方法的另一个副作用。我指向的URL是localhost:3001,所以我尝试了:

 stub_request(:any, "localhost:3001") 

我在内部使用了它,没有做任何事情,我在实际的测试中尝试了它 block,在i post :post_review, @params和WebMock似乎是什么也不做。我认为Webmock的作用是,它正在聆听对特定URL的任何请求,并且默认情况下返回成功或您指定的选项块。我不确定我是否正确使用此功能。

在此片段中:

stub_request(:any, "localhost:3001") 

:any是指http方法,例如获取或发布。因此,您正在固执/帖子/帖子/确切的URL以及仅此URL。我的猜测是,您发送请求的内容并非完全是localhost:3001

尝试将Rails.application.secrets[:platform_receiver_url][:base_url] + response_body["application_id"].to_s提取到变量中,并在运行规格时将其记录。我的猜测是,您需要更改存根为那个可能是Localhost的URL:3001/some_resource/1。

在Local Host上存根所有路径:3001

WebMock还支持REGEX的匹配URL:

stub_request(:any, /localhost:3001*/)

相关内容

  • 没有找到相关文章

最新更新