2011-03-24 76 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