gpt4 book ai didi

ruby - 如何使用 webmock 伪造对 Capybara/poltergeist 的响应?

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:16 24 4
gpt4 key购买 nike

我正在测试一个网络爬虫,我想使用 Webmock 来提供虚假网站以加快测试速度。当我模拟一个网站时,Ruby 的原生 HTTP 库工作正常,但 Capybara 似乎无法接收模拟响应。我知道 webmock 正在 stub 低级 HTTP 请求,我认为 capybara 使用哪一个以及配置使用哪个 webmock 很重要。但是,我需要知道 Capybara 如何发出 HTTP 请求,以及如何配置 webmock 以 stub 该特定方法集。

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':请求无法到达服务器,检查 DNS 和/或服务器状态(Capybara::Poltergeist::StatusFailError)

我也尝试过使用 FakeWeb,但它根本无法注册 URI。如果您认为这是不适合这项工作的工具,我愿意使用除 webmock 之外的其他 API。

提前致谢:)

最佳答案

Tom Walpole 是正确的。您可以使用 WebMock 来模拟您的服务器连接到的东西,但浏览器会建立自己的连接并且不受您对服务器所做更改的影响。

如果您想伪造浏览器从其他服务器请求的响应,请尝试类似 Puffing Billy 的响应.看一下可以设置为重播结果的缓存功能(很像 VCR)。

如果你正在处理一些非常简单的事情,你可以尝试使用 Capybara.string 加载你需要的数据。 .但这对于您想要的可能太有限了。

关于ruby - 如何使用 webmock 伪造对 Capybara/poltergeist 的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com