集中して [20210517☁️]

2021/05/17 本日のアウトプット。

・今日の積み上げ・

  • プログラミング学習 01:00
    • Rubyドリル
    • オリジナルアプリ/テストコード
  • 英語学習 00:40
    • mikan 500/600総復習
    • Polyglots 1本
    • ディクトレ 5本 

本日の勉強時間 01:40

今日は別のテストコードを実施!

が、carrierwaveを実装したため別のエラーが出てきました💦
他にも昨日実装した内容でエラーが出ていたのでそちらも修正。
新しい機能を実装するたび確認が必要ですね…!

・雑記・
今日は仕事を終えるのが遅くなってしまいました。
その分限られた時間の中で学習しました。
今週はずっとこんな感じになってしまいそうですが、短期集中でやっていこうと思います。

記事の備忘録込みの日記 [20210516☁️]

2021/05/16 本日のアウトプット。

・今日の積み上げ・

  • プログラミング学習 08:00
    • Rubyドリル
    • オリジナルアプリ/テストコード・ユーザー編集機能
    • 記事作成 1本
  • 英語学習 00:15
    • mikan 500/600総復習
  • チーム面談

本日の勉強時間 08:15

今日は久しぶりに同期のみなさんとのチーム面談がありました!
他の方が開発されているアプリを共有してもらったり、現状を共有したりと、いい刺激をもらいました!
学習の方ではテストコードのエラーをようやく解決!
さらに初実装の機能(本当に細かいものばかりですが)をいろいろ実装できました。
ブログでも後で自分が探せるよう、こちらに参考URLを記載します。

明日からはまたテスト実装です!今度はユーザー機能。
最低限の機能実装まであとちょっと!がんばるぞ〜〜!

・雑記・
明日は1年で最も忙しい日です💦
そして勝負の二週間!
仕事でも学習でも効率よく進めていきます🔥

【RSpec】投稿機能においてカテゴリーの選択・値の保存の際の注意点

皆様こんにちは、もしくははじめまして。IDEです。
今回の記事では、アソシエーションで組んだカテゴリーの値について、RSpecでことごとく苦しんだので記事として残しておきます。
今回はいつもより備忘録感が強めかと思いますが、もしどなたかの参考になれば幸いです。

目次

  1. コントローラー単体テスト/ActiveRecord::NotNullViolation
  2. 結合テスト/ラジオボタンの値が保存できない
  3. まとめ
  4. 参考文献

コントローラー単体テスト/ActiveRecord::NotNullViolation

not null制約がかかっているのはずのnameカラムが空ですよ〜〜と出る。
投稿機能のnameは入っているのになぜ…???
詳細の内容はコチラ

解決方法

FactoryBotの記述内容を修正

FactoryBot.define do
  factory :category do
    name { 'アレンジレシピ' } #id {1}と記述していたのを修正
  end
end

解決までの道のり

まず、値の生成をFactoryBotを使わずに記述

before do
    @user = User.create(name:'sample', email:"aaa@yahoo.com", password:"sample00", password_confirmation:'sample00')
    @deli = Deli.create(name:'test', text:'test', category_id:1, supermarket_id:1, user_id:1)

上記でテストコードを実行し、成功すればFactoryBotに、成功しなければRSpecに問題があると考えられる。
→テストが成功したのでFactoryBotに問題があることが判明。
FactoryBotの各記述(アソシエーションを組んでいるものも)を確認したところ、これでは???となりました。
ちなみに、アソシエーションでつながっているので例えカテゴリーの値を生成しないとしてもファイルは作らないとエラーが発生してしまいます⚠︎


結合テスト/ラジオボタンの値が保存できない

chooseメソッドでラジオボタンを選択しているにも関わらず、"Category must exist"と出てきます。

Delis
  投稿ができる時

From: /Users/user/projects/delishare/app/controllers/delis_controller.rb:16 DelisController#create:

    14: def create
    15:   @deli = Deli.new(deli_params)
 => 16:   binding.pry
    17:   if @deli.save
    18:     redirect_to root_path
    19:   else
    20:     render :new
    21:   end
    22: end

[1] pry(#<DelisController>)> @deli
=> #<Deli:0x00007fddd750d180
 id: nil,
 name: "test",
 text: "test",
 supermarket_id: 14,
 user_id: 109,
 category_id: 2,
 created_at: nil,
 updated_at: nil>
[2] pry(#<DelisController>)> @deli.valid?
=> false
[3] pry(#<DelisController>)> @deli.errors.full_messages
=> ["Category must exist"]

詳細の内容はコチラ

解決方法

テスト環境にカテゴリーテーブルの値を入れましょう!!!
develop環境でのカテゴリーの値はseedで入れていたため、テスト環境にもrake db:seed RAILS_ENV=testコマンドを実行して値を流します。
このとき、IDがdevelop環境と違う場合があるので必ず合わせましょう。


まとめ

今回、両エラーで共通して聞かれたのがテスト環境に値は入っていますか?でした。
今更ですがテストを実行する際はテスト環境上で実行されるため、必ずdevelop環境と同じ環境になっているか確認することが大切です!
テスト実行前やエラー発生時にsequel Pro等で確認しながら進めましょう。


今回のエラーの解決にあたり、teratailを利用しました。
それでも解決しなかったため、sisterでだむはさんのメンタープランを購入し、一緒に解決していただきました。
(1回目はCodePolarisのコミュニティで質問をし、解決へのヒントをいただきました。今思えばコミュニティで質問するような軽い内容じゃないしちゃんとお金をお支払いしてお教えいただくような案件だな…と反省😓)
今までカリキュラムで学習した内容ならともかく、独学ですべてエラーまで解決するとなるとかなり難しいとなりました。
しっかりと調べた上でわからないこともまだたくさん出てくるかと思うので、そういった際にはメンターの方々(私が今回利用したsisterでもMENTAでも、個人の契約でも)からヒントをいただくのも一つの手ではないでしょうか。
事前リサーチはもちろん怠らわずに!


参考記事

今回のエラー解決に当たり、以下の記事を参考にさせていただきました。
ありがとうございました。

コントローラー単体テスト/ActiveRecord::NotNullViolation

  • 【Rails】RSpec(Capybara)で使うvisitはit句の中でしか使えない?(調査中) - ヨージとプログラミング
  • RSpec + Capybara でラジオボタン/セレクト/チェックボックスのフォーム要素をテスト
  • ActiveRecord::NotNullViolation in Deviseエラー - Qiita

    結合テスト/ラジオボタンの値が保存できない

  • 【Rails】RSpecとCapybaraのFeature
  • 使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」 - Qiita
  • RSpec - フィーチャスペックを導入する - fv17の日記 - Coding Every Day

  • 身を置く場 [20210513☂️]

    2021/05/13 本日のアウトプット。

    ・今日の積み上げ・

    • プログラミング学習 00:12
    • 英語学習 01:03
      • mikan 500/600総復習
      • Polyglots 1本
      • ディクトレ 5本 

    本日の勉強時間 01:15

    今日は残業の日だったので家ではドリルしか学習できませんでした…
    同期の方の中には一通り終わって新しい学習を始めている方もいるようで…!
    テストコードでつまづきまくっているので、明日からの学習はいろいろ並行して進めていきます。
    やりたいことを一つ一つできるように!

    ・雑記・
    sisterというスキルキャリアシェアサービスに登録しました!
    オリジナルアプリに入るとスクールのメンターさんに質問ができないので、(カリキュラムの復習という名目ではできたが)一つご相談できる場にいたいと思っていました。
    Code Polarisのslackでエラー質問をしたらだむはさんが本当にわかりやすい解説をしてくださったのですが、そのだむはさんが開発されたサービスとのことで興味を持ちました。
    今考えたらだいぶヘビーな内容の質問をコミュニティの場に送ってしまったので、今度はちゃんと対価をお支払いしたい!と思ったのも一つのきっかけです。
    今は妹として質問だったり相談だったりして、皆さんのスキルだったり考え方を参考にしたいと思っています。
    いつかはお姉さんとして立てるように!

    オンラインセミナーってありがたい [20210512☀︎]

    2021/05/12 本日のアウトプット。

    ・今日の積み上げ・

    • プログラミング学習 08:27
      • Rubyドリル
      • オリジナルアプリ/テストコード
    • 英語学習 00:07
      • mikan 300/400総復習
    • Adobe オンラインセミナー 00:45

    本日の勉強時間 09:19

    今日は初めてAdobeのオンラインセミナーを受講しました。
    議題はロゴデザインについて、2部構成の前編。
    ロゴを制作するにあたってのフローを学習しました。
    プロの方の制作過程を拝見する機会というのはなかなかないので、今回のセミナーは非常に参考になりました。
    今までちゃんとみてなかったんですが、Adobeセミナーはちゃんとアーカイブに残してくれているそうで、そこにも勉強になりそうなものがたくさん…!
    今一番力を入れたいのはプログラミング学習なので牛歩の歩みになってしまいそうですが、デザインの勉強も少しずつ取り組んでいきます。
    オリジナルアプリのロゴはもう少しこだわりたいから今日の学習内容をさっそく取り入れてみようかな

    ・雑記・
    プログラミングもデザインも楽しい〜!という話を上記でしたので雑記はなし!(単純に書くことがなかった)
    今週末はスクールのチーム面談があるからそこまでにもうちょっとアプリ制作を進めたい!!
    やるぞ!

    効率的に [20210511☀︎]

    2021/05/11 本日のアウトプット。

    ・今日の積み上げ・

    • プログラミング学習 01:00
      • Rubyドリル
      • オリジナルアプリ/テストコード
    • 英語学習 00:45
      • mikan 300/400総復習
      • Polyglots 1本
      • ディクトレ 5本 

    本日の勉強時間 01:45

    今日もエラーと向き合っていました。
    しかし原因がまだ掴めていないので、引き続き明日も解析していきます。

    ・雑記・
    来週は年に2度の社内的に重要なイベントウィークです。
    その準備で徐々に徐々に業務が詰まっていきます。
    仕事でも個人の学習でもできることはどんどん先回りしていきます。
    効率よく作業することを目標に行動していきます。

    目的か口実か [20210510☀︎]

    2021/05/10 本日のアウトプット。

    ・今日の積み上げ・

    • プログラミング学習 02:49
      • Rubyドリル
      • オリジナルアプリ/テストコード
      • 記事作成 1本
    • 英語学習 00:52
      • mikan 300/400総復習
      • Polyglots 2本
      • ディクトレ 5本 

    本日の勉強時間 03:41

    今日でWeb技術入門は一段落です。
    とってもわかりやすくていい技術書でした!ツイッターランドのみなさんのおかげでこの本に辿り着きました。
    とはいえ面接の技術質問対策はもう少ししていきたいので、しっかりと復習はしていこうと思います。
    オリジナルアプリはテストコードの記述中ですが、別のエラーが出たのでまた対処中です。
    今日は原因箇所がわかったので明日それについて調べていきます。

    ・雑記・
    みんな大好きヤオコーくんで今日もお惣菜買ってきました。
    海鮮系も豊富なんですよね。
    今日は贅沢丼にしました。
    具が5種類くらい乗ってるまさに贅沢!
    アプリの素材のために(むしろ口実に)いろいろお惣菜買ってますが、店が偏ってきたのでそろそろちょっと遠出して買い出しに行こうかと思う今日この頃です。