在Rails3中使用Rspec测试资源的成员路由

10

我正在创建一个应用程序,允许用户参加考试。考试对象有许多问题,我希望用户分两个部分参加考试。为了实现这个工作流程,我在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 请求时,它们会显示第一组问题,以此类推...我已经完成了所有这些工作,现在我正在尝试为其编写测试 - 我知道这是反过来的,但我花了一段时间才搞清楚复杂的表单等。我想测试除非您是已登录用户,否则无法访问考试控制器。这对于新建和创建来说很简单,但我在尝试测试嵌套成员时遇到了麻烦。到目前为止,这是我尝试的:

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

非常感谢,任何帮助都将不胜感激。谢谢!

1个回答

16

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接