2012-04-05 61 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