J'ai une application qui nécessite l'utilisation de MyISAM sur quelques tables, mais le reste est le type traditionnel InnoDB. L'application elle-même ne concerne pas les transactions où elle s'applique à ces enregistrements, mais la performance est une préoccupation. L'environnement de test Rails suppose que le moteur utilisé est transactionnel, cependant, lorsque la base de données de test est générée à partir de schema.rb, elle est importée avec le même moteur. Est-il possible de surmonter ce comportement d'une manière simple?Test des unités Rails avec tables MyISAM
J'ai eu recours à une bidouille terrible pour que les tables sont le type correct en adjoignant à ce test_helper.rb:
(ActiveRecord::Base.connection.select_values("SHOW TABLES") - %w[ schema_info ]).each do |table_name|
ActiveRecord::Base.connection.execute("ALTER TABLE `#{table_name}` ENGINE=InnoDB")
end
Y at-il une meilleure façon de faire un modèle soutenu MyISAM-être testables?
Même problème ici - spec de coupe va recréer la base de données de test à partir de la fichier schema.rb qui ne contient pas d'options de moteur. La meilleure solution serait probablement de patcher la partie d'écriture de schéma de Rails pour ajouter les options: param à create_table() quand ce n'est pas la valeur par défaut. – simianarmy