У меня есть этот интеграционный тест с использованием капибары:
RSpec.describe 'adding a project', type: :system do
it 'allows a user to create a project with a tasks' do
visit new_project_path
fill_in 'Name', with: 'Project Runaway'
fill_in 'Tasks', with: 'Choose Fabric:3\nMake it Work:5'
click_on('Create a project')
visit projects_path
@project = Project.find_by(name: "Project Runaway")
expect(page).to have_selector(
"#project_#{@project.id} > td.name", text: "Project Runaway"
)
expect(page).to have_selector(
"#project_#{@project.id} > td.total-size", text: "8"
)
end
end
Каким-то образом не удается найти последний селектор (td.total-size):
Failures:
1) adding a project allows a user to create a project with a tasks
Failure/Error:
expect(page).to have_selector(
"#project_#{@project.id} > td.total-size", text: "8"
)
expected to find visible css "#project_1 > td.total-size" with text "8" but there were no matches. Also found "3", which matched the selector but not all filters.
# ./spec/system/add_project_spec.rb:14:in `block (2 levels) in <main>'
Но этот тестпрошло, когда я комментирую последнее утверждение.Но не удалось, если я прокомментировал часть td.name и оставил размер td.total без комментариев.
Вот HTML-страница:
<h1>All Projects</h1>
<table>
<thead>
<tr>
<td>Project Name</td>
<td>Total Project Size</td>
</tr>
</thead>
<tbody>
<% @projects.each do |project| %>
<tr class="project-row", id="<%= dom_id(project) %>">
<td class="name"><%= project.name %></td>
<td class="total-size"><%= project.total_size %></td>
</tr>
<% end %>
</tbody>
</table>
Мне нужно убедиться, что все данные отображаютсяна столе прямо.Кто-нибудь имеет такой же опыт?
Для дополнительной информации я использую:
- Rails 5.2.1
- Ruby 2.5.0
- Rspec3.7.1
- Капибара 3.11.1
Заранее спасибо
Обновлено
<body>
<h1>All Projects</h1>
<table>
<thead>
<tr>
<td>Project Name</td>
<td>Total Project Size</td>
</tr>
</thead>
<tbody>
<tr class="project-row", id="project_1">
<td class="name">Project Runaway</td>
<td class="total-size">8</td>
</tr>
</tbody>
</table>
</body>
Вот чтоHTML отображается.