carrierwave でテスト環境で画像ではなくて、txtファイルをアップロードしています。
モデルのカラムで確認すると、アップロードした内容が空になります。
どうしてでしょうか。
- ローカルのファイルはOK
- Rack::Test::UploadedFile.newはOK
- アップロード後のモデルのカラムはNG
コードは下記の内容です。
ruby
1# spec/models/user.rb 2 3 let(:user) { build(:user, backup_file: backup_file) } 4 5 before { 6 binding.pry 7 user 8 } 9 10 describe 'テスト' do 11 let(:backup_file_path) { File.join(Rails.root, "test.txt") } 12 let(:backup_file) { Rack::Test::UploadedFile.new(backup_file_path) } 13 14 . 15 . 16 end
ruby
1# config/initializers/carrierwave.rb 2 3 if Rails.env.test? 4 config.storage = :file 5 config.enable_processing = false 6 else 7 . 8 . 9 end
ruby
1# app/uploaders/text_uploader.rb 2 3 if Rails.env.test? 4 storage :file 5 else 6 storage :fog 7 end
spec/models/user.rb を binding.pry で止めて、その時点の内容を確認します。
backup_file_path の確認
問題ありません。
ruby
1> a = File.open(backup_file_path) 2> a.read 3=> "11111\n"
backup_file の確認
問題ありません。
ruby
1> a = File.open(backup_file) 2> a.read 3=> "11111\n"
モデルの確認
モデルで確認すると空になります
ruby
1> a = File.open(user.backup_file.path) 2> a.read 3=> ""
あなたの回答
tips
プレビュー