Rails応用3
※今回はLogumaを使ったので、そのコピーをここに貼っておく
2023.11.14
課題
Logumaでログ駆動に挑戦!普段Zennのスクラップでやってることをここでやってみる。
まずは課題の概要を確認。
課題1のテキスト版みたいな感じかな。目安時間2hってことはわりとシンプルに修正できると予想。とりあえず実際にどんなエラーが出るのかブラウザで確認しよう。
TypeError at /admin/articles/93da69d8-ea2b-42de-ba06-16f365db53c8/preview
no implicit conversion of nil into String
予想通り、nil
から文字列への暗黙の変換は行われないよって出たな。better_errors
入れてるのでコンソールでどの部分がnil
なのか突き止めよう。
判明。sentence.body
がnil
だ。だからこいつがnil
の場合は代わりに空の文字列をresult
に代入するってのが一つの案。やってみよう。
お、いけた。
ただ画像のときのことを考えると、そもそも表示させるかどうかを分岐させればOKの可能性もあるんだよな。表示してるのがどこか突き止めたいけど、ビューがすごく見づらい…。
本文(sentence.body
)入力した状態でプレビューして、開発者ツール使って表示箇所割り出した。
たぶんこれでもいけると思うので、試しにモデルの方のコードを元に戻してみる。
おっと?ダメらしい。画像のときはあくまでmedium.image_url
がnil
だったんであって、better_errors
0はbetter_errors
1じゃなかったのか実は。
そういえば課題の学習内容「result << object」だしな…。
モデルの方を修正するので合ってたのかも。ヒント見てみよう。
「この課題にヒントはありません」だそうだ。
最初の案通りnilガード(というらしい)戦法でいこう。ただしbetter_errors
2が空のときに空のHTMLタグが生成されないように、ビューの方の分岐も残す。
テスト
要件は満たせたのでここからはテストを書いていく。
まずはbetter_errors
3のFactoryBotから。
できた。テストコードを書いていく。
- ユーザーを生成して変数に代入
- 記事を生成
- ログイン
- ”記事”をクリック
- ”編集”をクリック
- ”ブロックを追加する”をクリック
- ”文章”をクリック
- ”プレビュー”をクリック
- 最新のウィンドウに移動
- 記事のタイトルが表示されているか確認
こんな感じでいいかな。書いてみよう。
…と思ったけど、画像のバグのときのテストコードがちょっと変えるだけでほぼそのまま使えそう。記事は生成しておくんじゃなくて新規作成してるからさっきのFactoryBotはいらないな。
よし、テスト走らせてみる。
通った!ただ失敗したときのエラーメッセージの表記が合ってるか自信ないので、わざとコードを下に戻して失敗パターンも試してみる。
エラーメッセージの表記は合ってたしちゃんと失敗はしたんだけど、思ってた失敗のしかたとちょっと違う…。「このbetter_errors
4を満たせませんでしたよ」じゃなくて普通にコードのエラーが表示されてしまう。
う〜ん気にはなるけどテストの内容は必須ではないし、もう見本のテストコードダウンロードしちゃおう。それでどう違うか見てみよう。
見本コードの方もテストはちゃんと通った。
で、中身。なぜか文章バグの方だけ記事を事前生成してるけど、それ以外は同じだなあ。
試しに再度失敗パターンやってみたけど、全く同じ結果になった。まあひっかかってほしいところでちゃんとひっかかってるからいいか。
よし、コミットプッシュしてプルリクする。
無事LGTM〜!
復習
今回は特に修正もなしかな。地味に嬉しい。