je les modèles suivants dans mon application:Association ne pas trouver les objets créés dans les tests
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
Je teste une partie de la fonctionnalité de jeu avec Shoulda/factorygirl, c'est le test:
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
Le problème est que la dernière assertion échoue. Je l'ai essayé beaucoup de choses laides comme:
@game.villages(true)
@game.players(true)
@game = Game.find(@game.id)
Mais je ne vois pas se rendre à la racine du problème. J'ai essayé de désactiver les fixations transactionnelles (je n'utilise pas d'appareils, mais je pense que cela affecte également Factory girl) et cela a aidé à d'autres tests mais ici cela n'a aucun effet.
L'assertion dans le bloc d'installation échoue dans environ 1 de 4 exécutions. J'essaie de suspecter MySQL ... Quand je le débogue à partir de RubyMine tout passe avec les instructions de rechargement, mais pas depuis la ligne de commande.
Je suis en mesure de résoudre le problème en changeant ce me semble un code indépendant. Je vais certainement revenir à cela et découvrir pourquoi. – Honza