更新:我现在意识到我一直在误读差异,我在比较的一边有一个字符串或符号。仍然不确定我应该如何将期望放在这个测试中..
我对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 :(得分:0)
我认为问题是assigns
之后的空间。它将符号:users
与您的列表进行比较。将其更改为:
assigns(:users).should =~ User.page
只是关于如何阅读Rspec失败的说明。 expected
之后的部分是您should
的部分,而got
之后的部分是您的代码实际生成的值。因此从报告中可以清楚地看出结果集并不相同。