2

我正在做一個簡單的測試項目,爲我的測試做好準備。 我對嵌套資源相當陌生,在我的例子中,我有一個newsitem,每個newsitem都有註釋。功能測試中的路由問題

路由看起來是這樣的:

resources :comments 

resources :newsitems do 
    resources :comments 
end 

我設置了功能測試在此刻意見,我遇到了一些問題。

這將得到一個newsitem的評論的索引。 @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"} 

我不能使用名稱路徑或我在做什麼錯在這裏?

在此先感謝。

回答

0

(假設Rails 3中)

試試這個在您的routes.rb

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

還是一樣problemen。 我使用的是 get:index,{:controller =>「/ comments」,:newsitem_id => @newsitem} 現在它不返回任何錯誤。但這隻會讓我到主機:端口/評論/新的權利?但是,這不應該成爲一個問題,因爲我給它的新網站正確嗎? 只是發現它很奇怪,爲什麼我不能使用路徑:s – Wishmaster 2011-01-06 14:12:39

+0

鑑於你實際上指定`routes.rb`中的嵌套資源,我認爲你應該完全刪除該行。 Rails應該爲你建立一條命名路徑。檢查`rake routes`的輸出,但它應該是`new_newsitem_comment`類似的東西 – 2011-01-06 14:38:31

7

的問題是在您的測試指定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