【问题标题】:RSpec error: expected: nil, got: [] (compared using ==)RSpec 错误:预期:nil,得到:[](使用 == 比较)
【发布时间】:2013-10-24 17:53:39
【问题描述】:

我正在尝试在控制器中使用 Rspec 测试这一行:

@dreams = Dream.public_dreams.includes(:user).where("users.type_id = ?", 5)

我在控制器测试中用这一行来测试它:

Dream.public_dreams.select { |dream| dream.user.type_id = 5 }.should eq(@dreams)

但是,我收到此错误:

expected: nil, got [] (compared using ==)

【问题讨论】:

  • 您刚刚删除了导致问题的部分。请删除您的问题,或留下问题并将其中一个答案标记为已接受...
  • @Nikita 想从Dream 模型中查看public_dream 的定义。请更新问题。 :)
  • 不,这与您以前遇到的问题不同。更改代码和错误并不是让人们帮助您或为他人建立良好知识库的好方法。
  • @NikitaMorshchikhin Erm。我在更新中没有看到public_dreams 方法的定义。
  • @kiddorails 你是什么意思?它在模型 dream.rb 中定义。

标签: ruby-on-rails testing rspec bdd rspec-rails


【解决方案1】:

@dreams 是一个实例变量,这意味着它与一个类相关联。控制器中的 @dreams 与测试中的 @dreams 不同。在 Ruby 中,对从未设置过的实例变量的任何引用都是nil

您可以通过以下方式“修复”您的测试

Dream.public_dreams.select { |dream| dream.user.type_id = 5 }.should eq([])

但您可能想要该数组中的某些内容。您可能没有返回任何内容,因为您的测试环境中的数据库中没有任何数据(或者可能只是没有该 ID)。

【讨论】:

  • 非常感谢!我同意你的看法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多