我的控制器有这段代码:
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
的存根请求?如果是,那怎么办?
答案 0 :(得分:3)
在功能测试中,请求来自浏览器,因此您无法使用stub_request模拟服务器上的请求。您应该在控制器/请求规范中验证重定向。如果您确实需要在功能测试中对此进行测试,那么最灵活的解决方案是使用可编程代理,如puffing-billy