简体   繁体   English

Rails:如何使用RSpec测试阵列的顺序

[英]Rails: How to Test an Array's Order with RSpec

I'm new to RSpec so I'm looking for a little help on a simple test: 我是RSpec的新手,所以我正在寻找一个简单测试的帮助:

# controller method
def show
  @group = Group.find(params[:id])
  @group_members = @group.group_members.order("posts ASC")
end

# in my rspec
it "should show order correctly" do
  @group = FactoryGirl.create(:group)
  @user_1 = FactoryGirl.create(:user, user_name: "Gary")
  @user_2 = FactoryGirl.create(:user, user_name: "Shawn")
  @user_3 = FactoryGirl.create(:user, user_name: "Gus")
  @user_4 = FactoryGirl.create(:user, user_name: "Jack")
  @group_member_1 = FactoryGirl.create(:group_member, group_id: @group.id, user_id: @user_1.id, posts: 30)
  @group_member_2 = FactoryGirl.create(:group_member, group_id: @group.id, user_id: @user_2.id, posts: 20)
  @group_member_3 = FactoryGirl.create(:group_member, group_id: @group.id, user_id: @user_3.id, posts: 10)
  @group_member_4 = FactoryGirl.create(:group_member, group_id: @group.id, user_id: @user_4.id, posts: 15)
  visit group_path(@group)

  # how do i assert the order of the array?
end

Can someone please help me with a statement to check that the array sorted correctly? 有人可以帮我一个声明,以检查数组是否正确排序吗?

my_array.should eq expected_array

That will make sure that each item is in the exact same spot. 这样可以确保每个项目都位于完全相同的位置。 If you want to check that an array has the same elements as another array, but the order doesn't matter, do this: 如果要检查一个数组与另一个数组具有相同的元素,但是顺序无关紧要,请执行以下操作:

my_array.should =~ expected_array

So in your particular case, you first would need to do a get to the show action, then check the variable. 所以,你的具体情况,你首先需要做一个getshow动作,然后检查变量。 That's done like this: 这样完成:

get :show, :id => @group.id
expected_group_members = [@group_member_3, @group_member_4, @group_member_2, @group_member_1]
assigns(:group_members).should eq expected_group_members

For more information, check out RSpec's GitHub page . 有关更多信息,请查看RSpec的GitHub页面

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM