2011-03-24 41 views
8

我正在创建一个允许用户参加考试的应用程序。考试对象has_many问题,我希望用户分两部分参加考试。为了实现这个工作流程,我创建了一个配置/ routes.rb中以下途径:使用rspec测试rails3中资源的成员路由

resources :exam do 
    member do 
    get 'get_part1' 
    put 'put_part1' 
    get 'get_part2' 
    put 'put_part2' 
    end 
end 

因此,当用户发出GET /检查/:ID/get_part1他们显示了第一组问题等等......我有这一切的工作,现在我正在为它编写测试 - 我知道这是倒退,但我花了一段时间才弄清楚复杂的形式和东西。除非您是登录用户,否则我想测试您无法访问考试控制器。这对于新建和创建来说是直接的,但我无法弄清楚如何测试嵌套成员。以下是我试过到目前为止:

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"} 

任何帮助将不胜感激。谢谢!

回答

13

尝试一个:

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

就像一个魅力。感谢Markus! – spinlock 2011-03-25 00:36:53

+0

不客气:) – 2011-03-25 05:17:23