我在这里遇到了一些问题,希望你帮助我。我有一张表中的酒店列表。 这是一个观点:
<% 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
最新版本 矩
答案 0 :(得分:1)
测试通常有三个阶段:设置,执行,断言。
设置阶段将创建一些酒店,这些酒店对于您正在测试的方面具有不同的属性。
执行阶段将点击对酒店进行排序的链接。
断言阶段将检查页面上的元素,以验证它们的顺序是否正确。
所以你最终会得到这样的东西:
# 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"]