Closed2

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.bodynilだ。だからこいつがnilの場合は代わりに空の文字列をresultに代入するってのが一つの案。やってみよう。

お、いけた。
ただ画像のときのことを考えると、そもそも表示させるかどうかを分岐させればOKの可能性もあるんだよな。表示してるのがどこか突き止めたいけど、ビューがすごく見づらい…。

本文(sentence.body)入力した状態でプレビューして、開発者ツール使って表示箇所割り出した。
たぶんこれでもいけると思うので、試しにモデルの方のコードを元に戻してみる。

おっと?ダメらしい。画像のときはあくまでmedium.image_urlnilだったんであって、better_errors0はbetter_errors1じゃなかったのか実は。
そういえば課題の学習内容「result << object」だしな…。
モデルの方を修正するので合ってたのかも。ヒント見てみよう。

「この課題にヒントはありません」だそうだ。
最初の案通りnilガード(というらしい)戦法でいこう。ただしbetter_errors2が空のときに空のHTMLタグが生成されないように、ビューの方の分岐も残す。


テスト

要件は満たせたのでここからはテストを書いていく。
まずはbetter_errors3のFactoryBotから。

できた。テストコードを書いていく。

  1. ユーザーを生成して変数に代入
  2. 記事を生成
  3. ログイン
  4. ”記事”をクリック
  5. ”編集”をクリック
  6. ”ブロックを追加する”をクリック
  7. ”文章”をクリック
  8. ”プレビュー”をクリック
  9. 最新のウィンドウに移動
  10. 記事のタイトルが表示されているか確認

こんな感じでいいかな。書いてみよう。

…と思ったけど、画像のバグのときのテストコードがちょっと変えるだけでほぼそのまま使えそう。記事は生成しておくんじゃなくて新規作成してるからさっきのFactoryBotはいらないな。

よし、テスト走らせてみる。

通った!ただ失敗したときのエラーメッセージの表記が合ってるか自信ないので、わざとコードを下に戻して失敗パターンも試してみる。

エラーメッセージの表記は合ってたしちゃんと失敗はしたんだけど、思ってた失敗のしかたとちょっと違う…。「このbetter_errors4を満たせませんでしたよ」じゃなくて普通にコードのエラーが表示されてしまう。
う〜ん気にはなるけどテストの内容は必須ではないし、もう見本のテストコードダウンロードしちゃおう。それでどう違うか見てみよう。

見本コードの方もテストはちゃんと通った。
で、中身。なぜか文章バグの方だけ記事を事前生成してるけど、それ以外は同じだなあ。
試しに再度失敗パターンやってみたけど、全く同じ結果になった。まあひっかかってほしいところでちゃんとひっかかってるからいいか。

よし、コミットプッシュしてプルリクする。

無事LGTM〜!


復習

今回は特に修正もなしかな。地味に嬉しい。

このスクラップは2023/11/13にクローズされました