WebMock适用于应用程序发出的请求。但是如何模拟浏览器向第三方服务发出的AJAX请求?
Rails 4。
答案 0 :(得分:1)
最后找到了2个答案:
重写网络代理,用于测试浏览器与外部网站之间的互动。
像WebMock一样工作:
proxy.stub('http://www.google.com/')
.and_return(:text => "I'm not Google!")
虽然之前的方法可行,但我发现它不适用于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。