如何在Rails中测试记录顺序?

gam*_*mov 7 testing ruby-on-rails

我发现测试来自数据库的记录是否正确排序是非常冗长和乏味的.我正在考虑使用数组'=='方法来比较两个搜索数组.数组的元素和顺序必须相同,所以它似乎很合适.问题是,如果缺少元素,即使严格按顺序排序,测试也会失败.

我想知道是否有更好的方法......

Dam*_*ien 5

Rails 4

app/models/person.rb

default_scope { order(name: :asc) }
Run Code Online (Sandbox Code Playgroud)


test/models/person.rb

test "people should be ordered by name" do
  xavier = Person.create(name: 'xavier')
  albert = Person.create(name: 'albert')
  all    = Person.all
  assert_operator all.index(albert), :<, all.index(xavier)
end
Run Code Online (Sandbox Code Playgroud)

Rails 3

app/models/person.rb

default_scope order('name ASC')
Run Code Online (Sandbox Code Playgroud)


test/unit/person_test.rb

test "people should be ordered by name" do 
  xavier = Person.create name: 'xavier'
  albert = Person.create name: 'albert'
  assert Person.all.index(albert) < Person.all.index(xavier)
end
Run Code Online (Sandbox Code Playgroud)


gam*_*mov 2

当我问这个问题时,我发现了我在寻找的东西。使用each_cons方法,它使测试变得非常简洁:

assert Person.all.each_cons(2).all?{|i,j| i.name >= j.name}
Run Code Online (Sandbox Code Playgroud)