1

私は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

配列が正しくソートされていることを確認するステートメントを教えてください。

4

1 に答える 1

3
my_array.should eq expected_array

これにより、各アイテムがまったく同じ場所にあることが確認されます。配列が別の配列と同じ要素を持っていることを確認したいが、順序は重要でない場合は、次のようにします。

my_array.should =~ expected_array

したがって、特定のケースでは、最初にアクションを実行してgetからshow、変数を確認する必要があります。それは次のように行われます:

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

詳細については、RSpec の GitHub ページを参照してください。

于 2013-05-18T03:00:55.883 に答える