0

私はいくつかのレガシーコードのテストに取り組んでいます。テーブルの 1 つにenum列があります。(私は知っています、嫌いではありません。私はそれを書きませんでした)。

単体テストを実行しようとするまで、すべてが正常に機能します。突然、データベース スキーマがenum列を として保存していますvarchar(0)。明らかに、値を設定できません。

これが私の大きな質問です。rake test:unitsにフックを追加して、列のタイプを調整するにはどうすればよいですか? enumかどうかは関係ありませんvarchar(100)

ありがとう!

4

2 に答える 2

0

これをすべての問題の解決策として提案しているわけではありませんが、この場合、独自の rake タスクをハックして、列の型を文字列に変更することができます。

namespace :db do
  desc "Change column type"
    task :test_setup do
      Rake::Task['db:test:prepare'].invoke
      Rails.env = ENV['RAILS_ENV'] = 'test'
      ActiveRecord::Migration.change_table :YOUR_TABLE_NAME do |t|
        t.change :YOUR_ENUM_COLUMN_NAME, :string, :limit => 100
      end
    end
end

このファイルは、次のように lib/tasks に配置されます。次に、実行するwhatever_you_want_to_call_it.rake. 代わりに実行し、enum 列をここでのニーズを満たすと思われる に変更します。間違っている場合は修正してください。rake db:test:preparerake db:test_setuprake db:test:preparevarchar(100)

私はこれをテストしていませんが、ここでも test:units への呼び出しをプラグインできるはずですRake::Task['test:units'].invoke

繰り返しになりますが、このようなハッキングは、データ型とデータベースによる処理方法を実際に変更しているため、一般的にお勧めするものではありませんが、これはあなたが要求したものなので、私は試して助けたいと思いました.

于 2013-09-23T18:10:55.713 に答える