kobasaです(´ω`*)今日でテックキャンプを始めて約1ヶ月になるんですね。
時間が経つのが早い早い。まだ全然何か作れる感がないのでこれから頑張っていこうと思います。
以前注文していた台湾ビールが届いたので土日で家族で飲んでました。
蜂蜜が入っているからかマイルドで飲みやすかったです。そんなに苦くない。
ノーマル、レモン、黒ビールとありましたがレモンが一番美味しかったですね!
お酒全然詳しくないんでこの調子でちょいちょい買っていきたいですね。
30日目の勉強内容
今日はずっとテストコードの勉強してました。
想定通り動いているかを確かめる記述をするので、どういうコードを書いているかが明確で
応用に入ってから一番理解しながら勉強できていたと思います。
ただ、このアクションのテストを全部網羅するにはどれだけのテストをすれば良いのかがまだ分かりませんね…そんなこともテストするの!?とかあります。
新しい用語も出てくるけれど、記述内容は大体except().to マッチャー()なので構文を覚えていればなんとかなりそう。
FactoryBotとFaker
FactoryBot:テストコードで使用する仮データを別のファイルにまとめて記述できるGem
Faker:ランダムな値を勝手に生成してくれるGem。文字数の制限もかけれる
FactoryBotの値にFakerを組み合わせることで、いちいち自分でテスト用のデータを考える必要がなくなるので、かなり効率的にテストを行うことができる。
先にbeforeフック(?)でインスタンス変数にFactoryBotを代入しておけば、各々のテストごとに自動で値を作成してくれるし、テストコード内にも作成された値を条件として使用できる。
単体テストと結合テスト
単体テストではモデルのみ、コントローラーのみといった部分的な挙動をテストする。
結合(統合)テストでは実際のユーザーの動きを追って挙動をテストしていく。
このアクションを行なったときには絶対に〇〇が表示されている(いない)はずだ!ということを記述していけば良いと思われる。
結合テストはコンソールで実行すると実際にChromeが開かれてページを進みフォームに記述していく。
アイコンがピョンピョン跳ねてブラウザが開き、怒涛の勢いでフォームに値を記述していきコンソールにエラーが流れる。という動きが見ていて楽しい(´ω`*)エラーはダメだけどね。
単体テストでよく使われている記述
except(response.body).to include(‘ ‘) リクエストに対するレスポンスのbody要素に’ ‘が含まれているか確認する。
結合テストでよく使われている記述
visit パス 記述したパスへ遷移する。
except(page).to have_content(‘ ‘) 現在のページの見た目に’ ‘が存在しているか確認している。
fill_in ‘ ‘, with: 記述したい値 フォームで使用する。実際に’ ‘という入力欄に記述したい値を記述する。
except{find(‘input[name=”commit”]’).click}.to change {User.count}.by(1)
find内の要素をクリックしたらユーザーのカウントが1増えた(新たにユーザーを登録できた)という記述。changeマッチャを使用する時は{}で記述する。
expect( find(‘.user_nav’).find(‘span’).hover ).to have_content(‘ログアウト’)
find内の要素にマウスを合わせると’ログアウト’という記述が確認できたことを表す。
spanだけでは1つに絞れないのでuser_navというクラスの中にあるspanという指定をしている。
おまけ:
‘ ’ は目に見えない文字列が存在するという意味。値に何も入っていないときに使う。
nil は何も存在しないという意味。アソシエーションの相手がいないことを表すときなどに使う。
コメント
1番やってて楽しいというか、思い通りにこなせてる感出ましたよね!笑
そうですね!今までより断然記述の意味を理解しながら進められてると思いますw