データベースを移行する必要がない場合は、再定義することができrspecsレール spec:prepare
タスクこのような:
は
lib/tasks/patch_rspec_rails.rb
Rake::Task["spec:prepare"].clear
namespace :spec do
task :prepare do
ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
end
end
元spec:prepare
タスクは、DBをセットアップされ、test:prepare
を呼び出します。
Rails 4.0(またはそれ以前の場合)以降のタスクtest:prepare
が存在します。このタスクは、Rails 5.0内にも存在します。鉄道がテスト依存の設定を追加するのは難しいことです。その定義はrake -W test:prepare
で確認できます。その タスクがヒットした場合はrake --trace spec
で確認できます。
ActiveRecord uses this task移行状態を確認し、dbを設定します。
このタスクが呼び出されないと、dbは削除されず、作成されません。
しかし、他の宝石がフックとしても使用されている場合、テストにプラグインすると機能しません。
編集:
Railsの4.1ので、あなたはconfig/environments/test.rb
内config.active_record.maintain_test_schema = false
を設定することができます。このようにして、Railsはテストスキーマを移行する必要がなくなりました。
私はあなたのソリューションをよりよく理解しようと考えていますが、実際にデータベースが落とされるのをどうやって防ぐのか、そしてschema.rbが存在しないために再作成に失敗するのはちょっと混乱します。私が集めることから、Rake :: Task ["test:prepare"]。invoke'への呼び出しを削除します。これは単にマイグレーションを実行し、そのタスクが宣言されている場合のみです - pre Rails 4.1.0を意味します。 Rails 4.1.0以降では、呼び出しは行われません。 – David
Rails 4以前では、タスク 'test:prepare'がフックとして存在します(https://github.com/rails/rails/blob/4-0-stable/railties/lib/rails/test_unit/testing.rake# L66)。 Rails 5では、このタスクも存在します(rake -W test:prep)。 ActiveRecordは、保留中の移行(https:// github。com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/railties/databases.rake#L360)を参照してください。この作業の中で、ドロップもまた起こる。 'test:prepare'が呼び出されていないときは、データベースはドロップも作成もされません。テスト用のデータベースが存在することを確認する必要がありますが、これは質問に付属しています。 – slowjack2k
優秀な説明ありがとうございました:)いくつかの誤報が浮かんでいるようで、私にとっては仕事自体も殴られていないので、私はさらに混乱しました。その説明をソリューションに追加することを検討する価値はあるかもしれません - 私はそれが価値を付加すると思います。 – David