路线.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 不匹配。
更具体地说:
ReviewsController 正在重定向到
place_path(assigns(:place))
。这与标准 Rails 工作流程不一致。断言需要place_review_path(assigns(:place), assigns(:review))
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 来解释奇怪的字符错误信息。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/