Порядок проверки огурца элементов в таблице - PullRequest
8 голосов
/ 09 ноября 2010

Я хочу запустить тест, который проверяет порядок элементов Я хочу, чтобы порядок возрастал по дате.

Вот мой сценарий функции огурца и шаг для последнего предложения.

Scenario: Order of the events should be Ascending
    Given I am signed into an account called "Gorilla Tech" as a customer
    When I follow "Register"
    And I follow "Events"
    And I follow "Register new event"
    Then I should see the header "Use the form below to register a new event"
    And I fill in "Title" with "Apefest 2010"
    And I fill in "Event at" with "2010-01-07"
    And I fill in "Add a note" with "This was truly awesome"
    Then I press "Create"
    Then I follow "Register new event"
    And I fill in "Title" with "Monkeyfest 2010"
    And I fill in "Event at" with "2010-01-08"
    And I fill in "Add a note" with "Yeah"
    Then "Apefest 2010" should appear before "Monkeyfest 2010"



   Then /"(.*)" should appear before "(.*)"/ do |first_example, second_example|
     response.body.should =~ /#{first_example}.*#{second_example}/
   end

У меня действительно есть две проблемы здесь. Первый - как правильно указать мой тест? Могу ли я указать свой тест выше другой и более правильный?

Что я хочу сделать, это зарегистрировать 2 разных события под 2 разными датами. Событие позже появится в виде списка на веб-странице. Затем я хочу проверить, в порядке ли события по дате. Я хочу, чтобы событие с самой новой датой появилось вверху.

вот код с коллекцией, которую я хочу проверить. В некотором смысле я хочу проверить, имеет ли коллекция в div ниже восходящий порядок по дате.

<div id="feeds">
    <table>
      <caption><%= t('events.all') %></caption>
      <thead>
        <tr>
          <th><%= Event.t(:title) %></th>
          <th><%= Event.t(:event_at) %></th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <%= render :partial => 'event', :collection => @events %>
      </tbody>
    </table>
  </div>

  <%= will_paginate(@events) %>

Ответы [ 3 ]

13 голосов
/ 09 ноября 2010

То, как вы написали определение шага, хорошо, вам просто нужно добавить многострочный (m) переключатель в ваш шаблон.:)

response.body.should =~ /#{first_item}.*#{second_item}/m
4 голосов
/ 10 ноября 2010

Я бы, возможно, предложил бы некоторую консолидацию для ваших шагов, используя таблицу.

Scenario: Order of the events should be Ascending
...
And I fill in "Title" with "Apefest 2010"
And I fill in "Event at" with "2010-01-07"
And I fill in "Add a note" with "This was truly awesome"
Then I press create

Я бы предложил:

Scenario: Order of the events should be Ascending
...
When I register a new event:
| Title | Event at | Add a note |
| Apefest 2010 | 2010-01-07 | This was truly awesome |

Ваше текущее решение имеет компромисс не оченьточный, глядя во всем теле ответа вы можете найти текст из одного примера в другом месте.Я бы предложил использовать XPATH вплоть до вашего порога боли или, я предполагаю, что вы используете Watir (или вариант), классы.

Вы можете собрать все имена событий из таблицы, перебирая строки(и указав столбец, который содержит имя события; здесь я предполагаю первое) ...

event_names = $browser.div(:id,"feeds").tables.first.rows.collect {|row| row[0].text}

Затем утверждают, что события существуют и они находятся в нужном порядке в массиве.

event_names.index(first_example).should_not be_nil
event_names.index(second_example).should_not be_nil
event_names.index(first_example).should < event_names.index(second_example)
0 голосов
/ 05 апреля 2013

Почему бы просто не использовать селектор nth-child?

page.should have_selector('tbody tr:nth-child(1)', text: first_example)
page.should have_selector('tbody tr:nth-child(2)', text: second_example)
...