Ruby on rails 3 用rspec测试rails3中资源的成员路由

Ruby on rails 3 用rspec测试rails3中资源的成员路由,ruby-on-rails-3,routing,rspec,Ruby On Rails 3,Routing,Rspec,我正在创建一个允许用户参加考试的应用程序。考试对象有很多问题,我希望用户分两部分参加考试。为了实现此工作流,我在config/routes.rb中创建了以下路由: resources :exam do member do get 'get_part1' put 'put_part1' get 'get_part2' put 'put_part2' end end 因此,当用户发出GET/exam/:id/GET_part1时,会显示第一组问题,等等。。。

我正在创建一个允许用户参加考试的应用程序。考试对象有很多问题,我希望用户分两部分参加考试。为了实现此工作流,我在config/routes.rb中创建了以下路由:

resources :exam do
  member do
    get 'get_part1'
    put 'put_part1'
    get 'get_part2'
    put 'put_part2'
  end
end
因此,当用户发出GET/exam/:id/GET_part1时,会显示第一组问题,等等。。。我已经完成了所有这些工作,现在我正试图为它编写测试——我知道这是倒退,但我花了一段时间才弄清楚复杂的形式和内容。我想测试您是否无法访问考试控制器,除非您是已登录用户。这对于new和create来说是直接的,但是我很难弄清楚如何测试嵌套成员。以下是我迄今为止所尝试的:

before(:each) do
  @exam = Exam.create
end                                                       

it "should deny access to 'get_part1'" do
  get get_part1_exam_path(@exam)                            
  response.should redirect_to(signin_path)
end
但是,此测试失败,出现以下错误:

Failure/Error: get get_part1_exam_path(@exam)
ActionController::RoutingError:
  No route matches {:controller=>"exams", :action=>"/exams/1/get_part1"}
任何帮助都将不胜感激。谢谢

试试那个:

get :get_part1, :id => @exam   (or @exam.id)

工作起来很有魅力。谢谢马库斯!