the*_*lus 7 ruby testing rspec capybara webmock
我试图阻止我的规范中的 URL,实现了我在使用时所做的事情capybara_webkit:
Capybara::Webkit.configure do |config|
config.block_url("*google*")
config.allow_url('*my_website.com')
end
Run Code Online (Sandbox Code Playgroud)
阅读本文后,我尝试执行以下操作:
require 'webmock/rspec'
module WebmockConfig
def self.default_disabled_urls
[
'*google*'
]
end
end
WebMock.disable_net_connect!(allow_localhost: true)
WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
Run Code Online (Sandbox Code Playgroud)
但我得到
禁用真正的 HTTP 连接。未注册的请求:POST http://127.0.0.1/session
即使那应该由WebMock.disable_net_connect!(allow_localhost: true).
在没有 的情况下运行规范时WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls),一切正常。
白名单capybara-webkit/黑名单会影响浏览器发出的请求,而 WebMock 只能影响您的应用程序发出的请求。这意味着WebMock对于你想要的东西来说是无用的,因为它实际上不会阻止你的浏览器加载来自谷歌等的任何内容。要在使用 selenium 驱动程序时做到这一点,你需要使用像puffing-billy这样的可编程代理,它允许你自定义对浏览器发出的任何匹配请求的响应。
要使用 headless chrome 和 puffing_billy 配置驱动程序,您可以执行类似的操作
Capybara.register_driver :headless_chrome do |app|
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.headless!
browser_options.add_argument("--proxy-server=#{Billy.proxy.host}:#{Billy.proxy.port}")
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
Run Code Online (Sandbox Code Playgroud)
您是否需要任何其他选项取决于您的系统配置等,但您应该能够通过查看当前的驱动程序注册来判断。
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |