RSpec + Capybara 范围界定 returns 意外结果
RSpec + Capybara scoping returns unexpected results
我有两个表:建议和关键字。
我正在尝试测试从关键字中删除项目(自动将其放入建议中)。
这是我的测试:
it "removes a chosen keyword" do
page.first(:link, "Add").click
within(:css, "#keywords") do
find('li:nth-child(1)').click_link('X')
expect(page).to have_no_content(item.search.term)
end
end
结果是:
1) New collection Suggestions removes a chosen keyword
Failure/Error: expect(page).to have_no_content(item.search.term)
expected not to find text "Gift for her" in "Keywords\nGift for her X"
# ./spec/features/collections_spec.rb:60:in `block (4 levels) in <top (required)>'
# ./spec/features/collections_spec.rb:53:in `block (3 levels) in <top (required)>'
这是 body 元素的打印:
<div class="col-lg-5 col-md-6 mb-4" id="suggestions">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Suggestions</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="suggestion-list">
<li class="list-group-item">
Gift for her
<a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/choose.1">Add</a><a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/destroy.1">X</a><br>
</li>
</ul>
</p>
</div>
</div>
</div>
<div class="col-lg-5 col-md-6 mb-4" id="keywords">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Keywords</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="keyword-list">
</ul>
</p>
</div>
</div>
</div>
还有我的 show.html.erb
文件:
<div class="col-lg-5 col-md-6 mb-4" id="suggestions">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Suggestions</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="suggestion-list">
<% if @suggestions %>
<% @suggestions.each do |s| %>
<li class="list-group-item">
<%= Hpricot.uxs s.search.term %>
<%= link_to 'Add', collection_item_choose_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><%= link_to 'X', collection_item_destroy_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><br>
</li>
<% end %>
<% end %>
</ul>
</p>
</div>
</div>
</div>
<div class="col-lg-5 col-md-6 mb-4" id="keywords">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Keywords</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="keyword-list">
<% if @keywords %>
<% @keywords.each do |s| %>
<li class="list-group-item">
<%= Hpricot.uxs s.search.term %>
<%= link_to 'X', collection_item_remove_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><br>
</li>
<% end %>
<% end %>
</ul>
</p>
</div>
</div>
</div>
在我看来范围界定不知何故关闭了,尽管我检查过并且 link 确实点击了(您可以在 puts page.body 中看到它)。有任何想法吗?
提前致谢!
这不太可能是一个范围问题,因为报告的文本是 "Keywords\nGift for her X" - 而如果它在 "suggestions" 部分看到文本,那么那里会有 "Add" 文本也。
更可能的是,由于某个地方出现错误,您的应用未对 'X' 上的点击进行处理。检查您的 test.log 以准确查看正在调用的方法以及是否存在错误。
此外,您没有提及与 Capybara 一起使用的驱动程序。如果您使用的是支持 JS 的驱动程序,则可能您没有为您在 and/or 上测试的硬件设置足够高的 Capybara.default_max_wait_time
turbolinks(假设您的应用程序中有它)正在参与.同样,查看您的 test.log
应该可以更好地了解实际发生的情况。另一个尝试是使用 save_and_open_screenshot
来获取实际页面的图像(假设您使用的是支持它的驱动程序)
如果您没有使用支持 JS 的驱动程序(即您使用的是 rack_test),那么您可能不需要 capybara/rails
并且链接的方法不是用过的。同样,检查 test.log
将显示用于每个请求的方法(get vs post)。
我有两个表:建议和关键字。 我正在尝试测试从关键字中删除项目(自动将其放入建议中)。
这是我的测试:
it "removes a chosen keyword" do
page.first(:link, "Add").click
within(:css, "#keywords") do
find('li:nth-child(1)').click_link('X')
expect(page).to have_no_content(item.search.term)
end
end
结果是:
1) New collection Suggestions removes a chosen keyword
Failure/Error: expect(page).to have_no_content(item.search.term)
expected not to find text "Gift for her" in "Keywords\nGift for her X"
# ./spec/features/collections_spec.rb:60:in `block (4 levels) in <top (required)>'
# ./spec/features/collections_spec.rb:53:in `block (3 levels) in <top (required)>'
这是 body 元素的打印:
<div class="col-lg-5 col-md-6 mb-4" id="suggestions">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Suggestions</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="suggestion-list">
<li class="list-group-item">
Gift for her
<a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/choose.1">Add</a><a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/destroy.1">X</a><br>
</li>
</ul>
</p>
</div>
</div>
</div>
<div class="col-lg-5 col-md-6 mb-4" id="keywords">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Keywords</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="keyword-list">
</ul>
</p>
</div>
</div>
</div>
还有我的 show.html.erb
文件:
<div class="col-lg-5 col-md-6 mb-4" id="suggestions">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Suggestions</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="suggestion-list">
<% if @suggestions %>
<% @suggestions.each do |s| %>
<li class="list-group-item">
<%= Hpricot.uxs s.search.term %>
<%= link_to 'Add', collection_item_choose_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><%= link_to 'X', collection_item_destroy_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><br>
</li>
<% end %>
<% end %>
</ul>
</p>
</div>
</div>
</div>
<div class="col-lg-5 col-md-6 mb-4" id="keywords">
<div class="card h-100">
<div class="card-body">
<h4 class="card-title">Keywords</h4>
<p class="card-text">
<ul class="list-group list-group-flush" id="keyword-list">
<% if @keywords %>
<% @keywords.each do |s| %>
<li class="list-group-item">
<%= Hpricot.uxs s.search.term %>
<%= link_to 'X', collection_item_remove_path(@collection, s),{ method: :post, class: "btn btn-primary" } %><br>
</li>
<% end %>
<% end %>
</ul>
</p>
</div>
</div>
</div>
在我看来范围界定不知何故关闭了,尽管我检查过并且 link 确实点击了(您可以在 puts page.body 中看到它)。有任何想法吗? 提前致谢!
这不太可能是一个范围问题,因为报告的文本是 "Keywords\nGift for her X" - 而如果它在 "suggestions" 部分看到文本,那么那里会有 "Add" 文本也。
更可能的是,由于某个地方出现错误,您的应用未对 'X' 上的点击进行处理。检查您的 test.log 以准确查看正在调用的方法以及是否存在错误。
此外,您没有提及与 Capybara 一起使用的驱动程序。如果您使用的是支持 JS 的驱动程序,则可能您没有为您在 and/or 上测试的硬件设置足够高的 Capybara.default_max_wait_time
turbolinks(假设您的应用程序中有它)正在参与.同样,查看您的 test.log
应该可以更好地了解实际发生的情况。另一个尝试是使用 save_and_open_screenshot
来获取实际页面的图像(假设您使用的是支持它的驱动程序)
如果您没有使用支持 JS 的驱动程序(即您使用的是 rack_test),那么您可能不需要 capybara/rails
并且链接的方法不是用过的。同样,检查 test.log
将显示用于每个请求的方法(get vs post)。