Маршрут работает в приложении, не проходит тест на огурец - PullRequest
1 голос
/ 01 июня 2011

У меня есть маршрут, который работает (распознается, может следовать по нему) в приложении Rails 3, но не проходит тест Cucumber:

routes.rb:

resources :tests do
  member do
    post 'start'
  end
end

Рабочая ссылка в приложении:

=button_to 'Start', start_test_path(@test)

Шаг корнишона:

And I am on the test start page for "Sample Test"

Сбой в paths.rb

when /the test start page for "([^\"]*)"/
  start_test_path(Test.find_by_name($1))

...

(::) failed steps (::)

No route matches "/tests/1/start" (ActionController::RoutingError)
<internal:prelude>:10:in `synchronize'
./features/step_definitions/web_steps.rb:30:in `/^(?:|I )am on (.+)$/'
features/test_workflow.feature:24:in `And I am on the test start page for "Sample Test"'

Есть идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Причина в том, что 'start' - это действие post, а не get.Когда вы используете шаг I am on the ... огурца, вы генерируете запрос на получение, а не запрос на публикацию.Чтобы это исправить, просто нажмите кнопку в огурце, вместо того, чтобы посещать прямой путь.Это можно сделать с помощью шага press огурца, например:

When I press "Start"

На этом шаге будет сгенерирован соответствующий пост-запрос, но он должен быть вызван после посещения страницы, на которой расположена кнопка.Кроме того, вы можете сгенерировать почтовый запрос в пользовательском шаге огурца, выполнив что-то вроде этого:

When /^I am on the test start page$/ do
  post("/tests/1/start")
end
1 голос
/ 01 июня 2011

Я не знаю огурца, но попробуйте это:

Переименуйте ваш маршрут с test на tests и ваш контроллер с TestController на TestsController

Это простоможет быть, это случай, когда ваши соглашения об именах приводят к путанице, потому что они не соответствуют ожиданиям Rails.

Я не знаю, прав ли я - просто предположение.

...