WebMock stub_request 不工作
WebMock stub_request not working
在我的 rails 项目中,其中一个初始化器请求并从 S3
获取某些数据。
S3.buckets[CONFIG['aws']['cdn_bucket']].objects['object_name'].read
这打破了使用 webmock
gem
的 rspec 测试套件
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 => {})
我在这里缺少什么?报错信息中的详细header在这里似乎没有意义允许各种请求到S3
编辑:
我刚刚注意到将 WebMock.disable!
添加到 spec_helper
也没有任何变化。我没有将存根添加到正确的位置吗?如果不在spec_helper
?
中应该加在哪里
经过深思熟虑后,很明显 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
如果包含 gem,这将生成一个 stub_request
,否则会继续,因为什么都没发生。
在我的 rails 项目中,其中一个初始化器请求并从 S3
获取某些数据。
S3.buckets[CONFIG['aws']['cdn_bucket']].objects['object_name'].read
这打破了使用 webmock
gem
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 => {})
我在这里缺少什么?报错信息中的详细header在这里似乎没有意义允许各种请求到S3
编辑:
我刚刚注意到将 WebMock.disable!
添加到 spec_helper
也没有任何变化。我没有将存根添加到正确的位置吗?如果不在spec_helper
?
经过深思熟虑后,很明显 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
如果包含 gem,这将生成一个 stub_request
,否则会继续,因为什么都没发生。