アプリには次のモデルがあります。
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 にも影響すると思います)。他のテストでは役に立ちましたが、ここでは効果がありません。
セットアップ ブロックのアサートは、4 回の実行のうち約 1 回で失敗します。私はMySQLを疑おうとしています... RubyMineからデバッグすると、リロードステートメントですべてが通過しますが、コマンドラインからは通過しません。