如何在Rails应用程序中模拟浏览器发出的请求?

时间:2015-07-17 21:42:00

标签: ruby-on-rails ruby-on-rails-4 rspec

WebMock适用于应用程序发出的请求。但是如何模拟浏览器向第三方服务发出的AJAX请求?

Rails 4。

2 个答案:

答案 0 :(得分:1)

最后找到了2个答案:

方法#1:Puffing Billy

重写网络代理,用于测试浏览器与外部网站之间的互动。

像WebMock一样工作:

proxy.stub('http://www.google.com/')
  .and_return(:text => "I'm not Google!")

方法#2:机架中间件

虽然之前的方法可行,但我发现它不适用于WebMock。因此,如果您想模拟浏览器对外部服务的请求,则无法模拟您的应用程序请求。

对我有用的方法是运行一个单独的Rack应用程序并将其注入中间件堆栈:

spec_helper.rb:

def test_app
  Rack::Builder.new{
    use ExternalServiceMock

    run app
  }.to_app
end

Capybara.app = test_app

ExternalServiceMock是一个机架应用程序,仅响应某些请求路径。

对于这个特定的应用程序,所有外部服务URI都存储在配置中,我在规范帮助器中设置它们:

ENV[ 'EXTERNAL_SERVICE_URI' ] = 'http://localhost:3000'

这会强制将所有外部请求发送到ExternalServiceMock。

答案 1 :(得分:0)

所以基本上你只需要保存第三方服务的响应并存根请求,然后就可以测试了!结帐录像机:https://github.com/vcr/vcr