gpt4 book ai didi

ruby-on-rails - 在使用 Webrat 进行测试时如何捕获到其他域的重定向?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:25 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有一个通过外部服务 Amazon FPS 重定向的表单。表单 POST 到我的应用程序中的一个操作,该操作重定向到亚马逊,亚马逊收集信息然后重定向回我的应用程序。

我正在使用 Webrat 测试这个工作流程。显然我无法测试亚马逊,所以我想检查是否发生了到亚马逊的重定向,然后模拟亚马逊的重定向回到我的应用程序,有效地从测试中模拟亚马逊。

但是,当 Webrat 提交表单时,它会调用 ActionController::Integration::Session#request_via_redirect,它遵循所有重定向,直到它获得不是重定向的响应。这包括重定向到亚马逊。 Rails 忽略域并从本地应用程序请求路径,但失败了。

我正在寻找一种方法来阻止 Webrat/Rails 对其他域上的 URL 发出请求并允许我验证重定向。

最佳答案

解决方案:走我自己的路。

class ActionController::Integration::Session
# Intercepts a request to a foreign domain. Use this to stub
# a service which the user is bounced through, such as an
# OpenID provider. The block should return a new URL to
# request. This is the URL which the foreign service would
# redirect the browser to if we were really using it.
#
# Currently, the return URL can only be requested with a GET.
#
# stub_request 'foreign.host.com' do |path|
# return_from_bounce_url
# end
def stub_request(host, &block)
@request_stubs ||= {}
@request_stubs[host] = block
end

def process_with_stubs(method, path, parameters = nil, headers = nil)
@request_stubs ||= {}

if @request_stubs.key? self.host
url = @request_stubs[host].call(path)
process_without_stubs(method, url, parameters, headers)
else
process_without_stubs(method, path, parameters, headers)
end
end
alias_method_chain :process, :stubs
end

关于ruby-on-rails - 在使用 Webrat 进行测试时如何捕获到其他域的重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com