2016-04-14 44 views
2

在我的rails項目中,其中一個初始化程序請求並從S3獲取某些數據。WebMock stub_request不起作用

S3.buckets[CONFIG['aws']['cdn_bucket']].objects['object_name'].read 

這打破它使用RSpec的測試套件webmock寶石

WebMock.allow_net_connect!(:net_http_connect_on_start => true) 



我收到以下錯誤,當我嘗試運行測試套件

WebMock::NetConnectNotAllowedError 

You can stub this request with the following snippet: 

stub_request(:get, "https://bucket.s3.amazonaws.com/object_name").with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'', 'Authorization'=>'AWS AKxxxxxx:Hyxxxxxxxxxx', 'Content-Type'=>'', 'Date'=>'Thu, 14 Apr 2016 15:10:18 GMT', 'User-Agent'=>'aws-sdk-ruby/1.60.2 ruby/1.8.7 i686-darwin15.3.0'}).to_return(:status => 200, :body => "", :headers => {}) 

添加此存根不能修復錯誤。逸岸,添加以下任一似乎沒有做任何改變:

WebMock.stub_request(:any, /.*amazonaws.*/).with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'', 'Authorization'=>'AWS AKIxxxxxxxxxx:MSxxxxxxxx'}).to_return(:status => 200, :body => "stubbed response", :headers => {}) 


WebMock.stub_request(:any, /.*amazonaws.*/).to_return(:status => 200, :body => "stubbed response", :headers => {}) 

它是什麼,我在這裏失蹤?錯誤消息的詳細頭似乎沒有意義在這裏,讓所有類型的請求,以S3

編輯:

我只注意到添加WebMock.disable!spec_helper也導致沒有變化。我是不是將這個存根添加到正確的地方?如果不在spec_helper中,應該在哪裏添加?

+0

您是否嘗試用代理攔截請求?只是爲了確定該請求是針對amazonaws.com進行的。 – Deva

+0

@Deva由於添加了「WebMock.disable!」並沒有改變,我想這段代碼被添加到了錯誤的地方。我不得不直接將它添加到初始化腳本中並修復它。請求網址是正確的。 – Sinstein

回答

1

睡過之後,很明顯stub_request被添加到錯誤的地方。直接將它添加到初始化程序可能已經解決了這個問題,但是這將破壞所有其他環境,因爲gem webmock僅包含在測試環境中。

因此添加以下代碼片段的腳本來修正這個

begin 
    require 'webmock' 
    WebMock.stub_request(:any, /testimonial/).to_return(:body => '') 
rescue LoadError 
end 

S3.buckets[CONFIG['aws']['cdn_bucket']].objects['object_name'].read 

這使得stub_request如果寶石包括其他簡單的推移作爲什麼都沒有發生。