У меня в приложении есть следующие модели:
class Game < ActiveRecord::Base
has_many :players
has_many :villages, :through => :players
end
class Village < ActiveRecord::Base
belongs_to :player
end
class Player < ActiveRecord::Base
belongs_to :game
has_many :villages
before_create :build_starting_village
protected
def build_starting_village
villages.build(some_attributes)
end
end
Я тестирую некоторую часть функциональности игры с Shoulda / FactoryGirl, это тест:
setup do
@villages = []
5.times do |i|
p = Factory(:player, :game => @game)
v = p.villages.first
assert v
@villages << v
end
assert_equal @villages.size, @game.villages.size
end
Проблемачто последнее утверждение не удается.Я пробовал много уродливых вещей, таких как:
@game.villages(true)
@game.players(true)
@game = Game.find(@game.id)
Но я не вижу, как добраться до корня проблемы.Я пытался отключить транзакционные фикстуры (я не использую фикстуры, но я думаю, что это также влияет на Factory Girl), и это помогло в других тестах, но здесь это не имеет никакого эффекта.1 из 4 пробежек.Я пытаюсь заподозрить MySQL ... Когда я отлаживаю его из RubyMine, все проходит с операторами перезагрузки, но не из командной строки.