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-3 - 在 Rails 3 Controller 测试中设置 host/remote_addr 和其他环境属性

sql-server - 在 MS SQL Server 2005 中使用 Rails 2.x

ruby-on-rails - 为什么我的 WEBrick 服务器会被杀死?

ruby - 保存后未真正调用 ActiveRecord 回调 after_save

ruby - 如何使用 ruby​​ 中的 wget 和 `&`

ruby-on-rails - 使用 omniauth 后登录页面卡在重定向循环中。虽然它之前工作正常

ruby - 从 irb 或 pry 运行单元测试

ios - 不通过 iTunes 在多个 iPhone 设备上测试我的 Titanium 应用程序?

ruby-on-rails - I18n : What is the difference between using 't(:test_key)' , 't(' test_key')' and ' t ('.test_key')'?

mysql - 如何在Activerecord中查询这个