В 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
Сейчас тесты не проходят, но есть еще одна проблема, а именно та, что указана в заголовке. Итак, в консоли рельсов…
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
Отсюда неудачный тест. Каким образом этот массив с двумя объектами имеет счетчик 0? Это вопрос рельсов, связанный с «сборкой» и т. Д., Но это также вопрос рубина. В этом массиве есть две сущности, но рубин, похоже, `` лжет '' об этом