Ruby on rails Rspec找不到父对象
好的,在我的实际邮件代码中,我使用了以下临时权宜之计:Ruby on rails Rspec找不到父对象,ruby-on-rails,ruby-on-rails-4,rspec,capybara,Ruby On Rails,Ruby On Rails 4,Rspec,Capybara,好的,在我的实际邮件代码中,我使用了以下临时权宜之计: if Rails.env == "test" @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id)}"} else @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemli
if Rails.env == "test"
@requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id)}"}
else
@requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id).signup.email}"}
end
这非常奇怪,因为:
NoMethodError
,“signup”,用于NilClass
Inventory
显然不是Nil
(我的意思是,如果没有找到注册
对象,情况会有所不同……)。注册。电子邮件
很好signup.emailforInventory
的测试也可以通过
想法?首先,你为什么不直接写呢
@requestlist[index] = { Itemlist.find_by_id(b.itemlist_id).name => Inventory.find_by_id(b.inventory_id).signup.email }
第二,你难道不怀疑NilClass的命名者可能就是这个意思吗
Inventory.find_by_id(b.inventory_id)
不从数据库返回任何行
第三,如果
if
并尝试“修复测试”(顺便说一句,您可以编写Rails.env.test?`)第1点只是我的愚蠢。我修复了代码。第3点我现在明白了,是的,这是我尝试“修复”“考试要开绿灯,否则我知道总有一天我会被红灯弄糊涂的。”。关于第2点,我不明白,我正在从数据库中检索一行,因为在测试的固定版本中,有一个对象对于Inventory.find\u by\u id(b.Inventory\u id)
将第二行更改为Inventory.find(b.Inventory\u id)
您将开始出现异常,因为此id在db中找不到(find_by_id
返回nil,您不应该在没有充分理由的情况下使用它),并且要解决库存未按id找到的问题,我想您必须显示您的模型。你有任何验证吗?我没有任何会阻碍这一点的验证。具有讽刺意味的是,我有一份确认书,上面说库存必须属于注册。。。这意味着,在测试时,库存根本存在,这意味着它必须与某些注册关联。对不起,我被你的其他建议弄糊涂了?无论如何,当我更改为justfind
时,我得到:error:无法准确地找到没有ID的库存,这证实了我的怀疑找不到没有ID的库存
意味着b。库存ID
要么为零,要么为空,现在您必须调试回设置它的位置,并在那里找到一个but。b
从哪里来?