発生した章
13.4.1 基本的な画像アップロードにて、CarrierWaveをインストールして、リスト 13.59: Micropostモデルに画像を追加するの通り修正したら、テストでエラーが出るようになった。
やったこと
CarrierWaveに画像と関連付けたモデルを伝えるために、mount_uploader
メソッドを使用する。引数に、属性名(今回はpicture)と、クラス名(PictureUploader)を指定する。
class Micropost < ApplicationRecord belongs_to :user default_scope -> { order(created_at: :desc) } mount_uploader :picture, PictureUploader validates :user_id, presence: true validates :content, presence: true, length: { maximum: 140 } end
発生したエラー内容
Micropostモデルを呼び出した際に、以下のエラーが発生する。
NameError: uninitialized constant Micropost::PictureUploader
チュートリアルでは、この時点でのtestはgreenになると書かれているが、redになる。
(Micropostモデルから、mount_uploader
メソッドを削除するとgreenになる)
yokoyan:~/workspace/sample_app (user-microposts) $ rails test Running via Spring preloader in process 9762 Started with run options --seed 39087 ERROR["test_profile_display", UsersProfileTest, 0.09379067993722856] test_profile_display#UsersProfileTest (0.09s) NameError: NameError: uninitialized constant Micropost::PictureUploader app/models/micropost.rb:4:in `<class:Micropost>' app/models/micropost.rb:1:in `<top (required)>' FAIL["test_content_should_be_at_most_140_characters", MicropostTest, 2.966606823960319] test_content_should_be_at_most_140_characters#MicropostTest (2.97s) Expected true to be nil or false test/models/micropost_test.rb:32:in `block in <class:MicropostTest>' FAIL["test_user_id_should_be_present", MicropostTest, 2.974773451918736] test_user_id_should_be_present#MicropostTest (2.97s) Expected true to be nil or false test/models/micropost_test.rb:22:in `block in <class:MicropostTest>' FAIL["test_content_should_be_present", MicropostTest, 2.9872157878708094] test_content_should_be_present#MicropostTest (2.99s) Expected true to be nil or false test/models/micropost_test.rb:27:in `block in <class:MicropostTest>' FAIL["test_micropost_interface", MicropostsInterfaceTest, 3.539895322872326] test_micropost_interface#MicropostsInterfaceTest (3.54s) "Micropost.count" didn't change by 0. Expected: 38 Actual: 39 test/integration/microposts_interface_test.rb:16:in `block in <class:MicropostsInterfaceTest>' 59/59: [==================================================================================================================] 100% Time: 00:00:03, Time: 00:00:03 Finished in 3.68161s 59 tests, 245 assertions, 4 failures, 1 errors, 0 skips
参考情報
NameError: uninitialized constant Article::ImageUploader when using Carrierwave on rails 4.1.5
上記の記事を見ると、config/environment.rbの行末に、require 'carrierwave/orm/activerecord'
を追記して解決したという人がいる。
他にも、springを再起動したら治ったという人もいる。
対策
springを再起動する。
yokoyan:~/workspace/sample_app (user-microposts) $ spring stop Spring stopped. yokoyan:~/workspace/sample_app (user-microposts) $ yokoyan:~/workspace/sample_app (user-microposts) $ spring start Version: 1.7.2 Usage: spring COMMAND [ARGS] Commands for spring itself: binstub Generate spring based binstubs. Use --all to generate a binstub for all known commands. Use --remove to revert. help Print available commands. server Explicitly start a Spring server in the foreground status Show current status. stop Stop all spring processes for this project. Commands for your application: rails Run a rails command. The following sub commands will use spring: console, runner, generate, destroy, test. rake Runs the rake command
再度テストを実行。 無事にエラーが解決しました。
yokoyan:~/workspace/sample_app (user-microposts) $ rails test Running via Spring preloader in process 13599 Started with run options --seed 41861 DEPRECATION WARNING: ActionDispatch::IntegrationTest HTTP request methods will accept only================ ] 84% Time: 00:00:02, ETA: 00:00:00 the following keyword arguments in future Rails versions: params, headers, env, xhr, as Examples: get '/profile', params: { id: 1 }, headers: { 'X-Extra-Header' => '123' }, env: { 'action_dispatch.custom' => 'custom' }, xhr: true, as: :json (called from block (2 levels) in <class:MicropostsInterfaceTest> at /home/ubuntu/workspace/sample_app/test/integration/microposts_interface_test.rb:25) 59/59: [==================================================================================================================] 100% Time: 00:00:03, Time: 00:00:03 Finished in 3.52173s 59 tests, 262 assertions, 0 failures, 0 errors, 0 skips