Ruby on Railsのチュートリアル13章の中で、テストをした際に起きたエラーに関する質問です。
ターミナル中で'rails test'を実行した結果、次のようなエラーが示されたため、その解決法を教えていただきたいと思っております。
Error: UserTest#test_accosiated_micropost_should_be_deleted_when_user_destroyed: NoMethodError: undefined method `picture_will_change!' for #<User:0x0000000005c4a950> Did you mean? picture_cache test/models/user_test.rb:82:in `block (2 levels) in <class:UserTest>' test/models/user_test.rb:81:in `block in <class:UserTest>'
app/test/models/user_test.rbのファイルは以下の通りです。---
Ruby
1require 'test_helper' 2 3class UserTest < ActiveSupport::TestCase 4 5 def setup 6 @user = User.new(name: 'Example User', email: 'user@examle.com', 7 password: 'foobar', password_confirmation: 'foobar') 8 end 9 10test 'accosiated micropost should be deleted when user destroyed' do 11 @user.save 12 @user.microposts.create!(content: 'Lorem Ipsum') 13 assert_difference 'User.count', -1 do 14 @user.destroy 15 end 16 end 17
これについて、Web上で調べたところデータベース中にカラムが存在しないことが原因であるとの情報を得たのですが、既に以下のマイグレーションを実行しており、
Ruby
1class AddPictureToMicroposts < ActiveRecord::Migration[5.1] 2 def change 3 add_column :microposts, :picture, :string 4 end 5end
コンソール上で'Rails console test'を実行し、
'micropost = Micropost.first'を実行すると、
Micropost Load (1.1ms) SELECT "microposts".* FROM "microposts" ORDER BY "microposts"."created_at" DESC LIMIT ? [["LIMIT", 1]] => #<Micropost id: 941832919, content: "Writing a short test", user_id: 762146111, created_at: "2019-10-03 07:15:24", updated_at: "2019-10-03 07:15:25", picture: nil>
が得られております。
以上を踏まえ、どのような原因が考えられるでしょうか?
よろしくお願いいたします。
NoMethodError: undefined method `picture_will_change!' 後ろにレシーバの情報があるはずです、エラー文は勝手に省略しないで全て提示してください。
関連するファイル、もしくはコードを提示してください。
エラーの発生箇所のコードは必ず提示してください。
> 既にこのカラムをデータベースにマイグレーションしており
これをまともに受け取ると picture_will_change! というカラムをマイグレートしていると受け取ることになるんですが、違いますよね?
違うだろうなとこちらがわかっていても該当コードが提示されていないのでこれ以上推測できません。
そもそもNoMethodErrorについては意味はご存知ですか?
もしわかっていないようなら意味を調べてください。