我正在尝试使用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 ==)

最佳答案

@dreams是一个实例变量,这意味着它已绑定到一个类。控制器中的@dreams与测试中的@dreams不同。在Ruby中,对从未设置的实例变量的任何引用将为nil

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

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

但您可能想要该阵列中的某些东西。您可能未返回任何信息,因为您的测试环境中数据库中没有任何数据(或者可能只是没有该ID)。

10-08 04:26