Q&A
前提・実現したいこと
Ruby on Railsを5.2.8から6.0.0にアップグレードして無事にアプリケーションは起動できるようになり、bundle exec rails db:migrateなどのコマンドも実行できます。
しかし、bundle exec rspec のコマンドでRSpecを実行すると以下のようなエラーが発生してRSpecが失敗してしまいます。しかし、テストが失敗している部分でもアプリケーションの動作には問題ありません。
どのように対応すれば、RSpecは成功するでしょうか?
PostsController POST #create ログインしている場合 有効なパラメータの場合 投稿詳細画面にリダイレクトすること Failure/Error: post :create, params: { form: { post: attributes_for(:post).merge(photo_params).merge(tag_params) } } Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8 # ./spec/controllers/posts_controller_spec.rb:140:in `block (5 levels) in <top (required)>'
上記のエラーはRails5.2.8までは発生しておりませんでしたが、Rails6.0.0にアップグレードすると発生するようになりました。
ちなみに、該当のRSpecのコートは以下のように記述しております。
it '投稿詳細画面にリダイレクトすること' do photo_params = { photos: { "0" => attributes_for(:post_photo) } } tag_params = { tags: attributes_for(:tag) } post :create, params: { form: { post: attributes_for(:post).merge(photo_params).merge(tag_params) } } post1 = Post.last expect(response).to redirect_to post_url(post1) end
以下のようにattributes_forメソッドを使用せずに、直接パラメーターを記述しても同じエラーが発生します。
post :create, params: { "form"=>{"post"=> {"content"=>"テスト", "photos"=>{"0"=>{"image"=> Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec/fixtures/test_image01.jpg'), "image/jpeg")}}, "status"=>"public", "tags"=>{"name"=>"目黒,ランチ"}} }}
お手数をお掛けいたしますが、よろしくお願いいたします。