#ruby-on-rails #cucumber
#ruby-on-rails #cucumber
Вопрос:
Я пытаюсь создать сценарий cucumber, который проверяет, загружены ли элементы для страницы «редактирование публикации». Однако моя проблема заключается в том, что я не знаю, как создать путь, который направит его на страницу.
Общий путь выглядит примерно так: /posting/id/edit
т.е. /posting/11/edit
Вот моя публикация.функциональный сценарий
# Editing existing post
Scenario: Saving the edits to an existing post
Given I am logged in
Given there is a posting
Given I am on the edit posting page
When I fill in "posting_title" with "blah"
And I fill in "posting_location" with "blegh"
When I press "Update posting"
Then I should see "Posting was successfully updated."
Я немного поработал с материалом Factory Girl, но у меня нет знаний, чтобы использовать его надлежащим образом (если он предлагает решение), и я не смог найти соответствующий пример.
Я также видел много предложений относительно ‘Pickle’, но, если возможно, я бы хотел избежать этого маршрута, чтобы упростить задачу, поскольку у меня очень ограниченный опыт.
Спасибо!
Ответ №1:
Есть ли на вашем веб-сайте ссылка, которая приведет кого-либо на страницу редактирования? Тогда вы могли бы сделать что-то вроде:
Given I am on the homepage
And I follow "Posts"
And I follow "Edit"
Предполагается, что на вашей домашней странице есть ссылка с текстом Posts, а затем еще одна на результирующей странице с именем Edit . Это лучший способ добиться этого, потому что должен быть прямой путь к любой странице, которую вы тестируете. Эти шаги также представлены в web_steps.rb
Вы также можете выполнить пользовательский шаг, подобный тому, который вы сделали там, Given I am on the edit posting page
и код будет выглядеть примерно так:
Given /^I am on the edit posting page$/ do
visit("/posting/11/edit")
end
Который вы, конечно, также могли бы обобщить I am on the edit posting page for posting 11
следующим образом. Но в целом тесты cucumber — это приемочные тесты, что означает, что нельзя обходить подобные вещи. У вас должна быть ссылка на страницу редактирования, которую можно щелкнуть.
Комментарии:
1. Спасибо за предложение 🙂 ! Я попробую это (кажется, это должно сработать). На самом деле я придумал решение, используя Factory Girl, но поскольку мой рейтинг настолько низок, я не могу опубликовать свое решение .. u.u. Пройдет еще 7 часов, прежде чем я смогу.
Ответ №2:
Я придумал решение, но я не уверен в его обоснованности с точки зрения того, насколько оно чистое. В итоге я использовал Factory Girl (установил драгоценный камень). Я сохранил свой сценарий таким же.
В разделе features/step_definitions я создал posting_steps.rb
Given /^there is a posting$/ do
Factory(:posting)
end
В разделе функции / поддержка я создал файл factories.rb со следующим внутри:
Factory.define :posting do |f|
f.association :user
f.title 'blah'
f.location 'Some place'
end
В моем paths.rb я использовал
when /the edit posting page/
edit_posting_path(Posting.first)
Как это работает (или, по крайней мере, как я думаю, что это работает), так это
Given there is a posting
выполняется, вызывается posting_step.rb (Factory(:posting) — это в основном Factory.create(:posting)), который, в свою очередь, использует определение фабрики, которое я создал в factories.rb . Это приводит к созданию экземпляра проводки.
Затем в my paths.rb
when /the edit posting page/
edit_posting_path(Posting.first)
получает идентификатор из экземпляра, чтобы в конечном итоге получить путь, который может напоминать /posting/1/edit , и тест продолжается!
Если необходимо внести какие-либо исправления, пожалуйста, дайте мне знать, поскольку я только осваиваюсь. Надеюсь, это поможет другим новичкам!
Комментарии:
1. Вы абсолютно правы в отношении того, как это работает. Это решение работает, но в целом смысл приемочных тестов заключается в том, чтобы не обходить вещи, притворяясь, что страница редактирования всегда предназначена для первой публикации (хотя это работает). Вы хотите использовать ссылки / действия, доступные на вашем веб-сайте. Тем не менее, это работает, и если это то, что вы используете, все в порядке.
2. Ах, понял. Спасибо за лакомый кусочек!