Ruby on rails rspec错误:通过示例学习Rails:当您没有';我没料到

Ruby on rails rspec错误:通过示例学习Rails:当您没有';我没料到,ruby-on-rails,rspec,Ruby On Rails,Rspec,在浏览Mike Hartl的LearnRails by Example教程时,我收到一个奇怪的rspec错误 在第419页,清单10.30:代码如下: it "should have an element for each user" do get :index @users[0..2].each do |user| response.should have_selector("li", :content => user.name) end end 当我运行rspec时,我收到以下错误消

在浏览Mike Hartl的LearnRails by Example教程时,我收到一个奇怪的rspec错误

在第419页,清单10.30:代码如下:

it "should have an element for each user" do
get :index
@users[0..2].each do |user|
response.should have_selector("li", :content => user.name)
end
end
当我运行rspec时,我收到以下错误消息:

失败:

1) UsersController GET 'index' for signed-in-users should have an element for each user
    Failure/Error: @users[0..2].each do |user|
    NoMethodError:
      You have a nil object when you didn't expect it!
      You might have expected an instance of Array.
      The error occurred while evaluating nil.[]
    # ./spec/controllers/users_controller_spec.rb:40

Finished in 2.58 seconds 75 examples, 1 failure

Failed examples:

rspec ./spec/controllers/users_controller_spec.rb:38 # UsersController GET 'index' for >signed-in-users should have an element for each user
我做了一些研究,在这个线程中发现了类似的问题,但我仍然无法通过测试

有什么想法吗

参考链接:


似乎没有在测试数据库中创建用户。通过插入,检查@users中是否有多个用户

puts @users.length
在“get:index”之后

如果这是nil,您可能应该再次检查before块

我刚想出来

@users[0..2].each do |user|
需要成为:

User.paginate(:page => 1).each do |user|

该应用程序仍然可以使用任一行,但要通过rspec测试,您需要使用User.paginate。

此外,第一个链接提到在sessions\u helper.rb文件中添加了current\u User和@current\u User。我试过了,但似乎没有纠正任何问题。另一条评论是,该应用程序运行良好。只是这一次测试失败了。这是非常令人沮丧的!它给了我一个@users.lenght的“当你没有预料到的时候,你有一个nil对象!”