如何为自定义路由编写rspec get语句?

时间:2011-09-29 03:30:41

标签: ruby-on-rails ruby-on-rails-3 rspec

我已经定义了一个用户资源,每个用户都有几个项目。现在我想为/user/:id/items(.:format)添加路由,而不是将项目定义为嵌套资源,我使用成员路由:

resources :user do
  member do
    match "/items" => "items#index", :via => [:get]
  end
end

问题是当我尝试为控制器编写rspec时,我不知道应该使用什么操作来访问items#index。我试过了

describe ItemsController do
  it "denies access to item index without login" do
    sign_out @user
    get "index", :user_id => @user.id, :format => :json
    response.code.should == "401"
  end
  # ...
end

但是在执行rake spec:控制器后,它说

Failure/Error: get "index", :user_id => @user.id, :format => :json
ActionController::RoutingError:
  No route matches {:user_id=>"1", :format=>"json", :controller=>"items"}

我正在使用Rails 3.1。如何使用rspec测试此成员路由?感谢。

1 个答案:

答案 0 :(得分:2)

非常确定需要:

get :index, :id => @user.id, :format => :json

您需要传递:id,而不是:user_id