如何测试 ransack 输出? Rspec
How to test ransack output? Rspec
我遇到了一些小问题,希望你能帮助我。我有 table 中的酒店列表。
这是一个视图:
<% provide(:title, 'List of hotels') %>
<h1>List of hotels</h1>
<table>
<tr>
<th><%= sort_link @search, :name, "Name" %></th>
<th><%= sort_link @search, :breakfast, "Breakfast" %></th>
<th><%= sort_link @search, :price_for_room, "Price for room" %></th>
<th><%= sort_link @search, :star_rating, "Star Rating" %></th>
<th><%= sort_link @search, :average_rating, "Average Rating" %></th>
<th><%= sort_link @search, :aasm_state, "State" %></th>
</tr>
<% @hotels.each do |hotel| %>
<tr>
<td><%= link_to ""+hotel.name, controller: "hotels", action: "show", id: hotel %></td>
<td><%= hotel.breakfast %></td>
<td><%= hotel.price_for_room %></td>
<td><%= hotel.star_rating %></td>
<td><%= hotel.average_rating %></td>
<td><%= hotel.aasm_state %></td>
</tr>
<% end %>
</table>
我还为用户添加了按名称、价格等对它们进行排序的功能。感谢 Ransack gem。但问题是我不知道如何测试这个输出。我写了一些测试,但我不知道下一步该做什么。
规格文件:
需要 'spec_helper'
describe "Admin" do
...
it { expect(page).to have_link("Name") }
it { expect(page).to have_link("Breakfast") }
it { expect(page).to have_link("Price for room") }
it { expect(page).to have_link("Star Rating") }
it { expect(page).to have_link("Average Rating") }
it { expect(page).to have_link("State") }
...
如何测试排序和可能的过滤结果?谢谢。
Rails 4.0.8
ruby 1.9.3p551
gem ransack
latest version on this
moment
测试通常分为三个阶段:设置、执行、断言。
设置 阶段将创建一些酒店,这些酒店针对您正在测试的方面具有不同的属性。
执行阶段是点击link对酒店进行排序。
assert 阶段将检查页面上的元素以验证它们的顺序是否正确。
所以你最终会得到这样的结果:
# setup (using FactoryGirl or similar)
# note how these are intentionally not sorted
create(:hotel, name: "Hotel C")
create(:hotel, name: "Hotel A")
create(:hotel, name: "Hotel B")
# execute
visit hotels_path
click_link "Name"
# assert
hotel_names = page.all("td.hotel-name").map(&:text)
expect(hotel_names).to eq ["Hotel A", "Hotel B", "Hotel C"]
我遇到了一些小问题,希望你能帮助我。我有 table 中的酒店列表。 这是一个视图:
<% provide(:title, 'List of hotels') %>
<h1>List of hotels</h1>
<table>
<tr>
<th><%= sort_link @search, :name, "Name" %></th>
<th><%= sort_link @search, :breakfast, "Breakfast" %></th>
<th><%= sort_link @search, :price_for_room, "Price for room" %></th>
<th><%= sort_link @search, :star_rating, "Star Rating" %></th>
<th><%= sort_link @search, :average_rating, "Average Rating" %></th>
<th><%= sort_link @search, :aasm_state, "State" %></th>
</tr>
<% @hotels.each do |hotel| %>
<tr>
<td><%= link_to ""+hotel.name, controller: "hotels", action: "show", id: hotel %></td>
<td><%= hotel.breakfast %></td>
<td><%= hotel.price_for_room %></td>
<td><%= hotel.star_rating %></td>
<td><%= hotel.average_rating %></td>
<td><%= hotel.aasm_state %></td>
</tr>
<% end %>
</table>
我还为用户添加了按名称、价格等对它们进行排序的功能。感谢 Ransack gem。但问题是我不知道如何测试这个输出。我写了一些测试,但我不知道下一步该做什么。 规格文件: 需要 'spec_helper'
describe "Admin" do
...
it { expect(page).to have_link("Name") }
it { expect(page).to have_link("Breakfast") }
it { expect(page).to have_link("Price for room") }
it { expect(page).to have_link("Star Rating") }
it { expect(page).to have_link("Average Rating") }
it { expect(page).to have_link("State") }
...
如何测试排序和可能的过滤结果?谢谢。
Rails 4.0.8
ruby 1.9.3p551
gem ransack
latest version on this moment
测试通常分为三个阶段:设置、执行、断言。
设置 阶段将创建一些酒店,这些酒店针对您正在测试的方面具有不同的属性。
执行阶段是点击link对酒店进行排序。
assert 阶段将检查页面上的元素以验证它们的顺序是否正确。
所以你最终会得到这样的结果:
# setup (using FactoryGirl or similar)
# note how these are intentionally not sorted
create(:hotel, name: "Hotel C")
create(:hotel, name: "Hotel A")
create(:hotel, name: "Hotel B")
# execute
visit hotels_path
click_link "Name"
# assert
hotel_names = page.all("td.hotel-name").map(&:text)
expect(hotel_names).to eq ["Hotel A", "Hotel B", "Hotel C"]