⭐️中間テスト アウトプット
・git clone
git clone クローンしたいurl
でclone。
cloneしたらcd
コマンドでclone先のディレクトリに移動して作業開始。
・bundle exec rspec spec
でバグの内容を1つずつ確認しながらバグを修正していく。
ちなみに今回のバグ内容は下記。
rspec ./spec/system/blogs_spec.rb:18 # Blogs blog一覧から詳細ページにアクセスした場合 blogの詳細ページが表示されること rspec ./spec/system/blogs_spec.rb:29 # Blogs blog詳細ページでコメントした場合 blogの詳細ページにコメントが表示されること rspec ./spec/system/blogs_spec.rb:44 # Blogs blog詳細ページでコメントを削除した場合 blogの詳細ページからコメントが削除されること rspec ./spec/system/blogs_spec.rb:62 # Blogs blog詳細ページで編集画面へのリンクをクリックした場合 blogの編集ページが表示されること rspec ./spec/system/blogs_spec.rb:72 # Blogs blog編集ページにアクセスした場合 blogの編集用フォームが表示されること rspec ./spec/system/blogs_spec.rb:80 # Blogs blog編集ページにアクセスした場合 blogの編集用フォームに編集前のblog情報が表示されること rspec ./spec/system/blogs_spec.rb:96 # Blogs blog新規作成ページにアクセスした場合 blogの新規作成ページが正しく表示されていること rspec ./spec/system/blogs_spec.rb:103 # Blogs blog新規作成ページにアクセスした場合 blogの新規作成ができること rspec ./spec/system/blogs_spec.rb:112 # Blogs blog新規作成ページにアクセスした場合 blogの新規作成でcontentも正しく作成できること rspec ./spec/system/blogs_spec.rb:124 # Blogs blog一覧ページでblogを削除しようとした場合 blogが一覧ページから削除されること
今回はサクサク進められたので、自分の手が止まってしまったバグだけ復習していきます。
・rspec ./spec/system/blogs_spec.rb:112 # Blogs blog新規作成ページにアクセスした場合 blogの新規作成でcontentも正しく作成できること
上記エラーでは、まず
1 . blogを作成した時にサーバーのログでparameterにどこまで送った情報が入っているかを確認しました。
結果、
titleはparameterに入っていて、
contentだけ入っていない状態だったので、
blogを作成して保存する動作である
BlogsController
のcreate
アクションを確認。
2 . 上記で@blog
がどこまで持ってこられているかをbinding.pry
を使って検証。
すると、contentの値がnil
だったので、
3 . @blog = Blog.new(blog_params)
の(blog_params)
の内容を確認。
permitの引数に:content
がなかったので追加。
def blog_params params.require(:blog).permit(:title, :content) end
ただ、contentにどんな文字を入力しても0
になって出力されるので、この0
はどこから来てるんだ??と疑問🤔
もしかしたらデータベースが怪しい?と感じたので、db/schema.rb
を確認。
すると、blogsテーブルのcontentのデータ型が、integer
になっている!
なので、マイグレーションファイルを新規作成してcontentのデータ型を変えることに。
・$ rails g migration ChangeDatatypeカラム名Ofテーブル名
・$ rails g migration ChangeDatatypeContentOfBlogs
※カラム名、テーブル名の頭文字は大文字
・生成されたファイルを編集
change_column :テーブル名, :カラム名, :データ型
最後に、rails db:migrate
した後しっかりrails db:migrate:status
してマイグレーションファイルがしっかりupされているか確認して、contentが文字列を表示してくれたことで解決!✨
🟢中間テスト総括
解説動画なしでほぼほぼ進められたので今後もこの調子で頑張る!
エラーログと
binding.pry
を使って、
どこまで変数を持ってこられているかを調査することで
問題の切り分けをし、 バグを1つずつ解決していけるんだな、
と今回の課題で再認識出来ました。
Railsチュートリアルの時は、エラーが起きた時にあれこれコードを書いて自分が書いたコードがどれか分からなくなり、沼にハマってしまっていたので、今後はそうならないように問題の切り分けをしっかりと行いながら開発を進めていきたいです!💪