2012-04-06 57 views
0

更新:现在我意识到我已经误读了diff,并且在比较的一侧有一个字符串或符号。然而,我仍然不确定我应该如何在这个测试中发挥期望。Rspec与ActiveRecord结果集匹配

我是Rspec和TDD的新手,我遇到了这个问题。我有一个控制器,这是否:

def index 
    @users = User.page(params[:page]) 
end 

(我使用Kaminara进行分页)

而一个规范:

describe "when the user DOES have admin status" do 

    login_admin_user 
    it "should allow the user access to the complete user list page" do 
    get :index 
    response.response_code.should == 200 
    end 

    describe "and views the /users page" do 
    before(:each) do 
     User.stub(:page) {[ mock_model(User), mock_model(User), mock_model(User) ]} 
    end 

    it "should show all users" do 
    get :index 
    assigns (:users).should =~ User.page 
    end 
    end 

end 

该规范失败,出现以下:

Failure/Error: assigns (:users).should =~ User.page 
    expected: [#<User:0x5da86a8 @name="User_1004">, #<User:0x5d9c90c @name="User_1005">, #<User:0x5d93ef6 @name="User_1006">] 
     got: :users (using =~) 
    Diff: 
    @@ -1,4 +1,2 @@ 
    -[#<User:0x5da86a8 @name="User_1004">, 
    - #<User:0x5d9c90c @name="User_1005">, 
    - #<User:0x5d93ef6 @name="User_1006">] 
    +:users 

这些结果集看起来完全相同。为什么此规格失败?提前致谢!

回答

0

我认为问题是assigns之后的空间。它将符号:users与您的列表进行比较。将其更改为:

assigns(:users).should =~ User.page 

而只是如何读Rspec的故障的说明。 expected之后的部分是您给should的部分,而got之后的部分是您的代码实际生成的值。所以从报告中可以清楚地看出结果集不相同。

+0

是的,这是破解它。谢谢! – theflyingbrush 2012-04-06 15:08:40