使用rspec测试rails中资源的成员路由

时间:2011-03-24 21:51:20

标签: 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时,会显示第一组问题等等......我已经完成了所有这些工作,现在我正在尝试为它编写测试 - 我知道这是倒退但我需要一段时间来弄清楚复杂的形式和东西。我想测试除非您是已登录的用户,否则无法访问考试控制器。这对于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"}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:13)

尝试一下:

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