Использование click_link в сценарии Cucumber

#ruby-on-rails #ruby #cucumber

#ruby-on-rails #ruby #cucumber

Вопрос:

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

 Scenario: Edit an existing member of the club
    Given I go to the member list page
    And I choose the first item
    And I fill in the "First Name" with "Bloggs
    When I press "Update"
    Then I should be on the member list page
    And I should see "Bloggs"
  

и файл member_step.rb содержит

 Given /^I choose the first item$/ do
    #save_and_open_page
    visit members_path
    click_link "1"
end
  

В моем файле routes.rb есть

 Gfs::Application.routes.draw do
   resources :members
end
  

Проблема в том, что я не могу заставить работать шаг click_link «1». Предполагается, что это будет

  1. Перейдите на страницу индекса ‘/members’
  2. На странице индекса отображается список пользователей, каждый из которых имеет префикс с номером, то есть ссылкой.
  3. Выберите ссылку

Что я знаю, так это то, что на индексной странице действительно отображается список, мой маршрут работает (‘/ members), но мой Cucumber дает сбой, и я не наслаждаюсь славой green.

Диагностика save_and_open_page показывает только заголовок индексной страницы, а не детали, как если бы контроллер не обращался к данным

Предложения только приветствуются.

Ответ №1:

Есть ли фон, на котором вы создаете данные участников? Если нет, возможно, данные не существуют.

Я бы также предложил добавить шаг, подобный

 And I should not see "Bloggs"
  

перед обновлением записи.

Ответ №2:

Если я правильно понял ваш cuke, вы действительно не увидите ссылку «1», потому что:

 Given I go to the member list page <-- first step
And I choose the first item <-- second step
  

…который расширяется до:

 Given I go to the member list page <-- first step
visit members_path
click_link "1"

why are you visiting the member's path after you just visited the member list page? you should be checking that you ARE in the member's path. Something like:


Given I have existing users(generate members here using factory or whatever)
And I go to the member list page( go to member page)
When I follow "1" (click the first member)
Then I should be on the "1"'s member page
When I fill in...etc you get the point
  

Надеюсь, это поможет!

Комментарии:

1. Имеет смысл и понятнее, но все равно никакой радости, поскольку я не вижу ссылку для первого участника. Может быть, я не генерирую элементы? Я предполагал, что при посещении страницы с индексом участников будет просто список существующих участников.

2. как я уже сказал выше, вам нужно сгенерировать их с помощью factory или machinist или чего-то еще, что вы используете для приспособлений

3. спасибо — это была проблема — я забыл правильно настроить данные, предполагая, что они уже были в базе данных. Момент для начинающих

Ответ №3:

Я собираюсь предположить, что ЕСЛИ «1» является настоящей привязочной ссылкой html, то вы могли бы рассмотреть возможность использования

 And I follow "1"
  

Вы могли бы легко обернуть это в свой собственный синтаксис, чтобы сделать его более эстетичным, но And I follow... шаг — это тот, который вы получаете из коробки в web_steps.rb.

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

 And I follow "1" within ".my-kickbutt-div"
  

Или что-то в этом роде.

Еще одна вещь, которую нужно проверить. Если у вас включен @javascript, возможно, вы видите неверные данные в вашем save_and_open_page. Мое приложение загружено на javascript / ajax, и мне приходится открывать выходные данные в браузере с отключенным javascript, чтобы увидеть, что там действительно видно: P Возможно, это не ваша проблема, но на всякий случай…

Комментарии:

1. хорошее предложение, но, похоже, проблема OP не в том, что он не может щелкнуть по нему, скорее, cuke не видит ссылку, по которой он должен щелкнуть .. потому что ее нет на странице

2. понятно. цель моего предложения (я должен был быть более ясным) состояла в том, чтобы удалить неизвестное количество его пользовательского шага, чтобы он был более «готовым». Я должен был сказать это сразу…