Проблема с маршрутами в функциональном тестировании - PullRequest
2 голосов
/ 06 января 2011

Я делаю простой тестовый проект, чтобы подготовиться к тесту.Я довольно плохо знаком с вложенными ресурсами, в моем примере у меня есть новостной элемент, и у каждого новостного элемента есть комментарии.

Маршрутизация выглядит следующим образом:

resources :comments

resources :newsitems do
    resources :comments
end

Я настраиваю функционалтесты на комментарии в данный момент, и я столкнулся с некоторыми проблемами.

Это позволит получить индекс комментариев к новостному элементу.@newsitem объявлен в настройке c.

test "should get index" do
    get :index,:newsitem_id => @newsitem
    assert_response :success
    assert_not_nil assigns(:newsitem)
end

Но проблема заключается здесь, в "должен получить новый".

 test "should get new" do
    get new_newsitem_comment_path(@newsitem)
    assert_response :success
 end

Я получаю следующую ошибку.

ActionController::RoutingError: No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"}

Но когда я просматриваю таблицу маршрутов, я вижу это:

new_newsitem_comment GET    /newsitems/:newsitem_id/comments/new(.:format)      {:action=>"new", :controller=>"comments"}

Не могу ли я использовать путь имени или что я здесь делаю неправильно?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 06 января 2011

Проблема в том, как ваш тест указывает URL.Сообщение об ошибке:

No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"}

и, конечно, нет действия с именем "/ newsitems / 1 / comments / new".Вы хотите передать хеш { :controller => :comments, :action => :new, :news_item_id => 1 }.

Правильный синтаксис прост:

get :new, :news_item_id => 1
0 голосов
/ 06 января 2011

(при условии, что Rails 3)

Попробуйте это в вашем routes.rb

GET    'newsitems/:newsitem_id/comments/new(.:format)' => 'comments#new', :as => :new_newsitem_comment
...