ゾンビのRSpecテストでは、このテストに合格しようとしています
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
現在、テストは合格していませんが、もう1つ問題があります。つまり、タイトルにある問題です。つまり、レールコンソールで…</ 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になりますか?これは「ビルド」などを取り巻くRailsの質問ですが、Rubyの質問でもあります。その配列には2つのエンティティが含まれていますが、rubyはそれについて「嘘をついている」ようです。