ruby-on-rails - rails assert_redirect_to

标签 ruby-on-rails testing

路线.rb

  map.resources :places do |places|
      places.resources :reviews  
  end

放置模型

class Place < ActiveRecord::Base
  has_many :reviews
end

审查模型

class Review < ActiveRecord::Base
  belongs_to :place
end

在我的评论 Controller 测试中,我有以下 assert_redirect_to 语句

assert_redirected_to place_review_path(assigns(:place), assigns(:review))

但功能测试失败并出现以下错误

  1) Failure:
test_should_create_review(ReviewsControllerTest) [/test/functional/reviews_controller_test.rb:24]:
Expected response to be a redirect to <http://test.host/places/980190962/reviews/980190963> but was a redirect to <http://test.host/places/980190962>.

  2) Failure:
test_should_destroy_review(ReviewsControllerTest) [/test/functional/reviews_controller_test.rb:47]:
Expected response to be a redirect to <http://test.host/places/980190962/reviews.%23%3Creview:0xb74783a0%3E> but was a redirect to <http://test.host/places/980190962/reviews>.

  3) Failure:
test_should_update_review(ReviewsControllerTest) [/test/functional/reviews_controller_test.rb:39]:
Expected response to be a redirect to <http://test.host/places/980190962/reviews/980190962> but was a redirect to <http://test.host/places/980190962>.

是什么导致了这个问题?

最佳答案

assert_redirect_to 正在按预期工作。相反,看起来您的 ReviewsController 正在重定向到意想不到的地方。 assert_redirected_to 似乎正常运行。你所有的失败都源于这样一个事实,即操作被重定向到的 url 与给定 assert_redirected_to 的 url 不匹配。

更具体地说:

  1. ReviewsController 正在重定向到 place_path(assigns(:place))。这与标准 Rails 工作流程不一致。断言需要 place_review_path(assigns(:place), assigns(:review))

  2. ReviewsController 正在重定向到 place_reviews_path(assigns(:place)),这与标准 Rails 工作流程一致。断言需要 place_review_path(assigns(:place), assigns(:review))。然而,因为 destroy 操作删除了 assigns(:review) 的 id,所以 place_review_path(assigns(:place), assigns(:review)) 将无法生成一个正确的 url 来解释奇怪的字符错误信息。

  3. ReviewsController 正在重定向到 place_path(assings(:place))。同样,这与标准 Rails 工作流程不一致。断言需要 place_review_path(assigns(:place), assigns(:review))

简短的版本是,除非您偏离了 Rails 约定,否则您的 Controller 列出的第一个和第三个故障将重定向到一个意想不到的地方。第二个失败的断言是错误的。

关于ruby-on-rails - rails assert_redirect_to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2098265/

相关文章:

ruby-on-rails - 生成新的 secrets.yml 文件

python - 在机器人框架数据驱动方法中生成测试用例

django - 是否可以在 Django 的测试中使用来自其他应用程序的固定装置?

ruby-on-rails - 为什么 post 在我的 Rails 功能测试中失败了?

java - 在 GlassFish 或 Tomcat 上测试 Web 服务

java - 在 Java 8 中设置环境变量

ruby-on-rails - Rails 控制台是动态的吗?

ruby-on-rails - Rails 应用程序设置?

ruby-on-rails - 在 Linux 上安装 ruby​​-filemagic gem 时缺少库

javascript - 如何在 Rspec 功能规范期间创建 Javascript stub 对象?