我正在测试一个网络爬虫,我想使用 Webmock 来提供虚假网站以加快测试速度。当我模拟一个网站时,Ruby 的原生 HTTP 库工作正常,但 Capybara 似乎无法接收模拟的响应。我知道 webmock 正在存根低级别的 HTTP 请求,我认为使用哪一个 capybara 以及配置使用哪一个 webmock 很重要。但是,我需要知道 Capybara 如何发出 HTTP 请求以及如何配置 webmock 以存根该特定方法集。
require 'capybara/poltergeist'
require 'webmock'
require 'pry'
include WebMock::API
WebMock.disable_net_connect!(allow_localhost:true)
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, js_errors: false)
end
# Configure Capybara to use Poltergeist as the driver
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
U = /google.com/
b = Capybara.current_session
stub_request(:any, U).
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
to_return(status:200, body:"abc", headers:{})
puts Net::HTTP.get(U,'/') #=> This returns "abc"
b.visit U
puts b.html #=> Throws error
我得到的错误如下:
command': Request failed to reach server, check DNS and/or server status (Capybara::Poltergeist::StatusFailError)
我也尝试过使用 FakeWeb,但这根本无法注册 URI。如果您认为这是错误的工作工具,我愿意使用除 webmock 之外的其他 API。
提前致谢 :)