Тест положите пользователей в таблицу html с капибарами и ожидайте xpath - PullRequest
0 голосов
/ 03 июля 2018

У меня есть пользовательская таблица ruby ​​на рельсах 5.1, и она выглядит так:

<table id="users" class="table table-bordered">
  <thead>
    <tr>
      <th></th>
      <th>ID</th>
      <th>Nombre</th>
      <th>Apellidos</th>
      <th>Correo electrónico</th>
      <th colspan="2">Registro</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td>i</td>
        <td><%= user.id %></td>
        <td><%= user.name %></td>
        <td><%= user.last_name %></td>
        <td><%= user.email %></td>
        <td><%= user.created_at.hour %>:<%= user.created_at.min%> hrs.</td>
        <td><%= user.created_at.to_date %></td>
      </tr>
    <% end %>
  </tbody>
</table>

Ситуация такова, что я работаю в тестировании с capybara, rspec & factorybot и мне нужно проверить, что я создаю 10 пользователей и добавляю их в таблицу, после чего я буду ожидать xpath для моего теста, который ниже:

 scenario 'admin view users' do
    visit admin_users_path
    users = create_list(:user, 10)
    expect(page).to have_xpath('//*[@id="users"]/tbody/tr/td[5]', text: "#{users.first.email}" )
  end 

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

Мой вопрос:

Как мне запустить тест, когда я создаю 10 пользователей (например), а затем добавить его в таблицу, чтобы послесловия правильно ожидали xpath?

1 Ответ

0 голосов
/ 03 июля 2018

Я нашел решение:

Видимо, я создавал пользователей после посещения страницы, поэтому представление никогда не получало данные. Я смог решить эту проблему, изменив порядок создания пользователей и после этого зайти на страницу, и тогда я смогу правильно ожидать xpath.

scenario 'admin view users' do
   users = create_list(:user, 10)
   visit admin_users_path
   expect(page).to have_xpath('//*[@id="users"]/tbody/tr/td[5]', text: "#{users.first.email}" )
end 
...