рельсы assert_redirect_to - PullRequest
       1

рельсы assert_redirect_to

4 голосов
/ 20 января 2010

routes.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

В моем тесте контроллера отзывов у меня есть следующее утверждение 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>.

Что может быть причиной этой проблемы?

1 Ответ

1 голос
/ 20 января 2010

assert_redirect_to работает как положено.Вместо этого, похоже, ваш ReviewsController перенаправляет в неожиданные места.assert_redirected_to, кажется, функционирует как надо.И все ваши ошибки связаны с тем, что URL-адрес, на который было перенаправлено действие, не соответствует URL-адресу, заданному assert_redirected_to.

В частности:

  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)).Однако, поскольку действие уничтожения удаляет идентификатор назначений (: review), place_review_path(assigns(:place), assigns(:review)) не сможет сгенерировать правильный URL, который объясняет нечетные символы в сообщении об ошибке.

  3. Перенаправляет ReviewsControllerдо place_path(assings(:place)).Опять же, это несовместимо со стандартным рабочим процессом Rails.Assert ожидает place_review_path(assigns(:place), assigns(:review))

Короткая версия: если вы не отклонились от соглашений Rails, первый и третий перечисленные сбои вашего контроллера перенаправляют в неожиданное место.Второе ошибочное утверждение просто неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...