Тестирование маршрутов членов ресурсов в rails3 с помощью rspec - PullRequest
8 голосов
/ 25 марта 2011

Я создаю приложение, которое позволит пользователю сдать экзамен. У объекта экзамена есть много вопросов, и я хочу, чтобы пользователь сдал экзамен в двух частях. Для реализации этого рабочего процесса я создал следующие маршруты в config / rout.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 Ответ

13 голосов
/ 25 марта 2011

Попробуйте это:

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