回答:
db:seed
rakeタスクは、主にだけロードするdb/seeds.rb
スクリプトを。したがって、そのファイルを実行してデータをロードするだけです。
load "#{Rails.root}/db/seeds.rb"
# or
Rails.application.load_seed
どこに配置するかは、使用しているテストフレームワークと、すべてのテストの前にロードするか、最初に一度だけロードするかによって異なります。あなたはそれをsetup
通話やtest_helper.rb
ファイルに置くことができます。
Rails.application.load_seed
右下のrequire 'rspec/rails'
私のrails_helperファイルに。database_cleaner gemを使用している場合-各テストの後にシードデータを失わないようにするために少し調整する必要があります。それはgemのドキュメントで確認できます
test/test_helper.rb
既存のrequire 'rails/test_help'
行の後に追加しました
私はそれがあるべきだと思います
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
config.active_record.schema_format =:sqlがある場合、db:test:loadは実行されないため(db:test:clone_structure is)
--trace
すると、これがどのように機能するかを理解するのに役立ちました。
task 'db:test:prepare' => 'db:seed'
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
前に最終追加Rake::Task["db:seed"].invoke
db:seed
実行時の環境がdevelopment
奇妙なことに...
上記のスティーブのコメントは正解だと思います。を使用Rails.application.load_seed
して、シード環境データをテスト環境にロードできます。ただし、このデータが読み込まれるタイミングと頻度は、いくつかの要因によって異なります。
すべてのテストの前にこのファイルを1回実行する便利な方法はありません(このGithubの問題を参照)。各テストの前に、おそらくテストファイルのセットアップ方法で、データを1回ロードする必要があります。
# test/models/my_model_test.rb
class LevelTest < ActiveSupport::TestCase
def setup
Rails.application.load_seed
end
# tests here...
end
RSpecのbefore(:all)
メソッドを使用して、このモデルのすべてのテストのシードデータを読み込みます。
describe MyModel do
before(:all) do
Rails.application.load_seed
end
describe "my model..." do
# your tests here
end
お役に立てれば。
before(:suite)
代わりに呼び出しbefore(:all)
ます。フォーマットされたコードを含めるために別の回答を投稿しました。
次のように、db:test:prepareの一部としてdb:seedを呼び出しています。
Rake::Task["db:seed"].invoke
このようにして、シードデータはテストクラス全体ではなく、テスト実行全体で1回読み込まれます。
シードバンクを使用している場合は、シードのロード方法が変更されるため、load ...
ここで提供されているソリューションを使用することはできません。
そしてRake::Task['db:seed'].invoke
test_helperに入れるだけで次の結果が得られました:
Don't know how to build task 'db:seed' (RuntimeError)
しかし、その前にload_tasksを追加すると、うまくいきました:
MyApp::Application.load_tasks
Rake::Task['db:seed'].invoke
マットの答えに基づいて、そのようなルートを取る場合は、ファイルRails.application.load_seed
内のbefore(:suite)
ブロックでrspec_helper.rb
はなく、ブロック内で呼び出すことをお勧めしbefore(:all)
ます。このようにして、シードコードは、テストグループごとに1回ではなく、テストスイート全体に対して1回だけ呼び出されます。
rspec_helper.rb:
RSpec.configure do |config|
...
config.before(:suite) do
Rails.application.load_seed
end
...
end
test_helper.rb
したのですが、stackoverflow.com / a / 1998520/68210は機能しました。