Web模拟不适用于Rails控制器中的redirect_to

时间:2015-10-30 11:11:33

标签: ruby-on-rails ruby rspec capybara webmock

我的控制器有这段代码:

class MyController < App::BaseController
  def login
    redirect_to 'https://some.api.com/auth?params'
  end
end

当然,我不希望在测试中被重定向到外部网站。所以我决定添加webmock gem并添加:

WebMock.disable_net_connect!(allow_localhost: true)

到我的spec_helper.rb

在我的功能测试中,我有:

  scenario 'stubbing external api' do
    visit '/connect_to_some_external_api'
    stub_request(:any, /https:\/\/some.api.com\/auth\//)
      .to_return(status: 200, body: 'DUPA. A nawet DUPA123')
    # this works as intended  ->Net::HTTP.get('https://some.api.com/auth/')
    click_link 'Get me to MyController#login'
  end

当我致电Net::HTTP.get('https://some.api.com/auth/')时,我得到回复"DUPA. A nawet DUPA123"。哪个很酷!这意味着stub_request有效。

问题是当用户点击发送重定向的MyController#get链接时。它没有存根请求,只是让浏览器重定向到外部应用程序。

是否可以存储来自控制器redirect_to的存根请求?如果是,那怎么办?

1 个答案:

答案 0 :(得分:3)

在功能测试中,请求来自浏览器,因此您无法使用stub_request模拟服务器上的请求。您应该在控制器/请求规范中验证重定向。如果您确实需要在功能测试中对此进行测试,那么最灵活的解决方案是使用可编程代理,如puffing-billy