我正在尝试用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 ==)
答案 0 :(得分:1)
@dreams
是一个实例变量,这意味着它与一个类绑定。控制器中的@dreams
与测试中的@dreams
不同。在Ruby中,对从未设置过的实例变量的任何引用都是nil
。
您可以通过
“修复”您的测试
Dream.public_dreams.select { |dream| dream.user.type_id = 5 }.should eq([])
但你可能想要那个数组中的东西。您可能没有返回任何内容,因为您的测试环境中的数据库中没有任何数据(或者可能只是没有该ID)。