【问题标题】:rspec error: Learn Rails by Example: You have a nil object when you didn't expect itrspec 错误:通过示例学习 Rails:当您没有预料到它时,您有一个 nil 对象
【发布时间】:2011-12-10 07:25:01
【问题描述】:

在阅读 Mike Hartl 的通过示例学习 Rails 教程时,我收到一个奇怪的 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

我做了一些研究,在这个帖子中发现了类似的问题,但我仍然无法通过测试。

有什么想法吗?

参考链接:

Why are my RSpec tests failing, but my app is working?

Cookies do not persist in Rspec on rails 3.1

Rails Tutorial chapter 10.3.3 - 4 RSpec Errors (app working)

【问题讨论】:

  • 另外,第一个链接提到在 session_helper.rb 文件中添加了 current_user 和 @current_user。我试过了,但似乎没有纠正任何问题。
  • 另一条评论,该应用运行良好。只是这一项测试失败了。很郁闷!

标签: ruby-on-rails rspec


【解决方案1】:

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

puts @users.length

在'get :index'之后

如果这是 nil,您可能应该仔细检查您的 before 块。

【讨论】:

  • 它给了我一个“你没想到它有一个 nil 对象!”对于@users.lenght
【解决方案2】:

我刚刚想通了。

@users[0..2].each do |user|

需要成为:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多