Webscraper をテストしていますが、Webmock を使用して偽の Web サイトを配信し、テストを高速化したいと考えています。Web サイトをモックすると、Ruby のネイティブ HTTP ライブラリは正常に動作しますが、Capybara はモックされた応答を受信できないようです。Webmock が低レベルの HTTP リクエストをスタブ化していることはわかっています。どのカピバラが使用し、どの 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 が仕事に不適切なツールだと思われる場合は、webmock 以外の他の API を使用してもかまいません。
前もって感謝します :)