如何只测试我重定向到的URL的一部分(使用assert_redirected_to)?

Dan*_*sch 16 ruby testing ruby-on-rails

在我的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进行响应)

Dan*_*sch 20

http请求命令,如post,get等创建称为一个实例变量@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
Run Code Online (Sandbox Code Playgroud)

*(实际上,这些http方法只使用私有方法process,它创建@response变量).

  • 对于后代:你可以使用`%r {https://my.url.com/foo}`构建正则表达式而不必转义斜杠. (5认同)