Web 模拟不适用于 Rails 控制器中的 redirect_to
Web mock does not work with redirect_to in Rails controller
我的控制器有这段代码:
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
有效。
问题是当用户单击 link 到 MyController#get
时发生重定向。它不会存根请求,只是让浏览器重定向到外部应用程序。
是否可以存根来自控制器 redirect_to
的请求?如果是,那又如何?
在功能测试中,请求来自浏览器,因此您无法使用 stub_request 在服务器上模拟请求。您应该在 controller/request 规范中验证重定向。如果您真的需要在功能测试中对此进行测试,最灵活的解决方案是使用像 puffing-billy
这样的可编程代理
我的控制器有这段代码:
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
有效。
问题是当用户单击 link 到 MyController#get
时发生重定向。它不会存根请求,只是让浏览器重定向到外部应用程序。
是否可以存根来自控制器 redirect_to
的请求?如果是,那又如何?
在功能测试中,请求来自浏览器,因此您无法使用 stub_request 在服务器上模拟请求。您应该在 controller/request 规范中验证重定向。如果您真的需要在功能测试中对此进行测试,最灵活的解决方案是使用像 puffing-billy
这样的可编程代理