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

标签 ruby-on-rails ruby testing

在我的 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)

最佳答案

postget等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/

相关文章:

ruby-on-rails - 为 Ruby on Rails 3.1.0 安装 mysql2 gem

ruby-on-rails - Ruby/Slim 是否支持 Markdown ?

css - 部署到 Heroku 后 Bootstrap 样式丢失

ruby - 我如何用 Ruby 模拟一个类?

c# - 使用 Moq 验证方法调用

ruby-on-rails - 在 rails 中嵌入 youtube 视频

Ruby:如何将日期时间字符串转换为纪元时间的 float ?

ruby - 是否有用于 websockets 的 ruby​​ 的稳定的、生产就绪的库?

php - 使用 phpunit 在函数调用参数列表中模拟接口(interface)实例化

unit-testing - 如何验证是否使用 Spock 中的一组指定元素调用了方法?