在 RSpec Testing for Zombies 中,我试图让这个测试通过
describe Zombie do
it "starts off with two weapons" do
z = Zombie.new(:name => "Ash")
z.weapons.count.should == 2
end
end
为此,我使用了 after_initialize 模型回调来创建(“构建”)武器
class Zombie < ActiveRecord::Base
after_initialize :grant_two_weapons
def grant_two_weapons
self.weapons.build(:name => "axe")
self.weapons.build(:name => "stick")
end
end
现在测试没有通过,但还有一个问题,即标题中的问题。所以在 Rails 控制台中……</p>
z = Zombie.new
z.weapons
#=> [#<Weapon id: nil, name: "axe", zombie_id: nil, created_at: nil, updated_at: nil>, #<Weapon id: nil, name: "stick", zombie_id: nil, created_at: nil, updated_at: nil>]
看起来我们得到了测试中描述的我们想要的东西,但是当我这样做时:
z.weapons.count
#=> 0
因此测试失败。这个包含 2 个实体的数组如何计数为 0?这是一个围绕“构建”等的轨道问题,但它也是一个红宝石问题。该数组中有两个实体,但 ruby 似乎在“撒谎”