mysql - 使用 MyISAM 表进行 Rails 单元测试

标签 mysql ruby-on-rails unit-testing myisam

我有一个应用程序需要在几个表上使用 MyISAM,但其余的都是传统的 InnoDB 类型。应用程序本身不关心它应用于这些记录的事务,但性能是一个问题。

不过,Rails 测试环境假定使用的引擎是事务性的,因此当从 schema.rb 生成测试数据库时,它会使用相同的引擎导入。是否有可能以简单的方式覆盖此行为?

我采取了一种可怕的技巧,通过将其附加到 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

是否有更好的方法使 MyISAM 支持的模型可测试?

最佳答案

您可以编辑 schema.rb 并修改 create_table 调用以包含以下标志,如下所示:

create_table(:suppliers, :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8')

当您创建迁移时,请尝试将其添加到迁移中。我不知道当你运行 rake db:schema:dump 时这是否会持续。根据您的经验,测试环境似乎没有正确复制开发环境,它可能不会:(

更多关于 create_table 选项的信息:​​

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#M001901

关于mysql - 使用 MyISAM 表进行 Rails 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616173/

相关文章:

php - 如何在php中的每个页面上获取用户名

mysql - MySql 过程中的 WHILE 循环返回多个结果

python - 单元测试完成后如何删除图像文件?

unit-testing - Grails - Apache Tika 插件测试应用失败

php - Laravel - 如何查找外键值

mysql - 在 MySQL 中搜索包含新行的文本

ruby-on-rails - 寻求构建电子商务 Rails 应用程序的指导

ruby-on-rails - 如何将 worker 分为工作延迟+ heroku的工作池?

javascript - rails : loading partial with jQuery

iphone - 如何在 iPhone 中对这个 hitTest 覆盖进行单元测试?