2012-04-05 59 views
3

我注意到Rails在开发数据库中创建触发器,但在测试数据库中创建触发器,因为它会从schema.rb创建测试数据库,而不是运行迁移。我有一个触发器(作为迁移),需要测试它是否正确,我该怎么做?我尝试手动添加触发器到测试数据库,但没有奏效。使用触发器进行Rails测试

回答

4

默认情况下,rails使用数据库独立schema.rb设置测试数据库,它不理解类似触发器的东西。

如果您将config.active_record_schema_format更改为:sql,则rails会转储代表开发数据库结构的原始SQL,并使用它来重新创建测试数据库。这个转储被放置在development.sql中,然后被用来代替schema.rb

这个转储是使用你的数据库提供的命令行工具完成的,因此会遵循活动记录不知道的触发器的功能

+0

感谢您的帮助!我试过这样做,但没有奏效。问题是,即使运行迁移,即使它显示在开发数据库上,但在schema.rb中没有显示触发器。也许是因为我将触发器添加为sql代码?但我找不到任何其他方式来添加触发器 – Nonos 2012-04-06 22:35:17

+1

好吧,我最终得到它的工作!我取消了注释test.rb config.active_record.schema_format =:sql中的行,然后运行RAILS_ENV = test db:migrate并添加了触发器。再次感谢! – Nonos 2012-04-06 23:08:01

+0

当你这样做时,schema.rb根本不再使用 - 应该有一个用于替代的development.sql。你需要做rake db:test:prepare(除非你正在运行rake测试,rake spec等为你做这件事) – 2012-04-07 06:56:16