我的应用程序使用HTTParty发送请求(以便抓取数据)。我写了一些rspec测试来测试发送请求服务。我的发送请求服务规范包括在我的应用程序中运行所有规范测试时要排除的标记:
RSpec.describe SearchFlight::Jet::SearchFlightRequest do
describe 'send search ticket request to Jetstar website', http_request: true do
context 'search ticket round trip successfully' do
# initialize
it 'return status 200' do
# my expects here ...
end
end
end
end
当我跑步时
bundle exec rspec --tag ~http_request
我花了超过4分钟加载和1.86s进行完成测试并运行选项(排除{:http_request => true)
如果我删除发送请求服务规范,加载文件的时间约为3.02秒。
有什么不同?为什么请求服务规范花了很长时间才排除它们?
答案 0 :(得分:1)
我建议不要从Rspecs拨打外部服务。看看webmock gem并尝试模拟外部服务调用。以下是在spec_helper.rb
中模拟所有Amazon S3请求的示例:
config.before(:each) do
stub_request(:any, /.*s3.amazonaws.com.*/).to_return(:status => 200, :body => "", :headers => {})
end
通过这种方式,您可以模拟body
中预期的响应。
根据您的问题,我认为没有任何理由说明为什么HTTPATy在Rspecs下可能会如此缓慢,可能与您的特定呼叫和/或所使用的外部服务有关。
希望这有帮助。