在我的 Rails 应用程序的功能测试中,我想测试我被重定向到的位置。预期的 URL 指向外部资源(这意味着它不是我的应用程序的一部分)。
URL 如下所示:https://my.url.com/foo?bar1=xyz&bar2=123
不幸的是我无法预测参数,因为它们是由外部资源生成的。*
但是,URL 的其余部分始终保持不变:https://my.url.com/foo
我通常使用 assert_redirected_to
进行此类测试,但这需要整个 URL,包括参数。
谁能想出另一种方法来测试该重定向,但只检查没有参数的 URL 的第一部分?
(该 URL 不在 assigns
哈希中)
*(我对应用程序进行 API 调用,该应用程序响应我将重定向到的 URL)
最佳答案
post
、get
等http请求命令在被调用时会创建一个名为@response
的实例变量*。 @response
本身包含一个名为 redirect_url
的方法,它存储您被重定向到的 URL(以防您真的被重定向)。
因此,我可以使用普通的 assert_match
将正则表达式与 @response.redirect_url
进行比较:
post :my_action_to_test
assert_response :redirect
assert_match /https:\/\/my.url.com\/foo/, @response.redirect_url
*(实际上,这些 http 方法只是使用私有(private)方法 process
,它创建了 @response
变量)。
关于ruby-on-rails - 如何只测试重定向到的 URL 的一部分(使用 assert_redirected_to)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2024752/