Огурец и webrat - Как обработать динамические URL в paths.rb?

Я использую Огурец для разработки BDD в моем проекте Ruby on Rails, и я сталкиваюсь с некоторым беспорядком о том, как path.rb обрабатывает пути, используемые в приложениях направляющих.

Учитывая я имею:

class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

и у меня есть следующая функция Cucumber:

Scenario: A test feature
    Given I am on the parent page
     When I follow "Link to Children"
     Then I should be on the children list page

с путем, определенным как:

def path_to(page_name)
  case page_name
  when /the children list page/
       '/parents/:id/children'
end

Проблемой, с которой я сталкиваюсь, является следующая ошибка при выполнении функции:

Spec::Expectations::ExpectationNotMetError: expected: "/parents/:id/children",
 got: "/parents/1726/children" (using ==)

Я действительно не забочусь что: идентификатор. Что я должен сделать вместо этого? Это даже возможно с веб-шагами по умолчанию? Я думаю о проблеме неправильным способом?

11
задан y0mbo 15 January 2010 в 20:34
поделиться

2 ответа

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

when /the children list page for "(.+)"/
    p = Parent.find_by_name($1)
    parent_children_path(p)
18
ответ дан 3 December 2019 в 05:58
поделиться

В нашем приложении мы всегда хотели, чтобы новая запись в базе данных всякий раз, когда пользователь нажимал кнопку «новый». Таким образом, новое действие нашего контроллера автоматически вызывает create, а затем перенаправляет на действие редактирования.

Мы столкнулись с аналогичной проблемой при тестировании, когда нас не очень заботил идентификатор - просто он попал на страницу редактирования приложения.

Вот что я придумал.

(ПРИМЕЧАНИЕ: определение шага написано с использованием 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, там будет формой для модели, которую вы редактируете. Эта форма всегда содержит скрытое поле с идентификатором конкретной записи, которую вы редактируете.

Шаг находит скрытое поле, извлекает из него идентификатор, а затем ищет web_step, чтобы разрешить путь для этой модели.

Просто убедитесь, что у вас есть путь, соответствующий модели, которую вы ищете.

when /the edit person page for "([^\"]*)"/
  edit_person_path($1)
2
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: