db:fixtures:loadを使えばseed-fuなどを使った場合に起きるseedデータとテストデータの二度書きの手間無くなります。
しかし、paperclipで画像を保存してる時など、fixturesからは読み込めないものを保存している場合に対応できません。
僕は下記のようにして解決しています。
rakeタスクを書く
db:image:load
という画像をアップするtaskを書く。
# lib/tasks/fixtures.rake:
namespace :db do
namespace :images do
desc "Upload images."
task load: :"db:fixtures:load" do
User.all.each do |user|
path = Rails.root.join("test", "fixtures", "files", "users", "avatars", "#{user.name}.jpg")
user.update!(avatar: open(path)) if File.exist?(path)
end
end
end
end
db:fixtures:loadの後に実行する
# lib/tasks/fixtures.rake:
...
Rake::Task["db:fixtures:load"].enhance do
Rake::Task["db:images:load"].execute
end
これでrails db:fixtures:load
すればその後で画像も入ります。