В нашем приложении мы всегда хотели новую запись в базе данных каждый раз, когда пользователь нажимал кнопку «новая». Таким образом, новое действие нашего контроллера автоматически вызывает create, а затем перенаправляет на действие edit.
Мы столкнулись с аналогичной проблемой при тестировании, когда нам было неважно, что это за идентификатор - просто он попал на страницу редактирования приложения.
Вот что я придумал.
(ПРИМЕЧАНИЕ. Определение шага написано с использованием capybara , но оно не должно сильно отличаться от webrat)
Then /^(?:|I )should now be editing the (.*)$/ do |model|
id = find_by_id("#{model}_id").value
Then "I should be on the edit #{model} page for \"#{id}\""
end
Основная предпосылка заключается в том, что когда вы находитесь на странице редактирования Rails, будет форма для редактируемой вами модели. Эта форма всегда содержит скрытое поле с идентификатором конкретной редактируемой записи.
Шаг находит скрытое поле, извлекает из него идентификатор, а затем ищет веб-шаг для определения пути для этой модели.
Просто убедитесь, что у вас есть путь, соответствующий модели, которую вы ищете.
when /the edit person page for "([^\"]*)"/
edit_person_path($1)