20200913_アウトプット

アプトプット画像

学習した内容(大まか)

railsのテストコードについて(コントローラー)5時間30分

 

理解したこと(項目)

 

  • Request Spec(概念)
  • rails g rspec:request tweets(ターミナル)
  • FactoryBot.create(:tweet) (VSコード)
  • bundle exec rspec spec/requests/tweets_spec.rb(ターミナル)
  • get root_path(VSコード)
  • response.status(ターミナル かつ binding.pry時)
  • expect(response.status).to eq 200 (VSコード)
  • HTTPステータスコード(概念)

 

自分の言葉で説明すると・・

コントローラーが担っている「リクエスト」と「レスポンス」のやりとり部分をテストします。

「レスポンス」と「リクエスト」には「HTTP通信」という方法が使われています。

 

「HTTP通信」とは、ざっくりいうと「あらかじめ取り決めしておいたデータの送信・受信方法」です。

例えば、手紙を出すときに、送信者は住所と名前を書いてポストに投函します。

受信者は、ポストを用意して、そこに投函されると中身を見ることが出来ます。

あらかじめ「郵便」の方法が決まっているからこそ、送り合うことが出来ます。

 

同じように「HTTP通信」であらかじめルールを決めます。

その一つが、「response.status」です。これは、ステータスによって、送信中なのか、届いたのか、送信できなかったのか、あらかじめ数字を定めていくことで状況を確認できます。

 

  • 100~  → 処理の継続中

  • 200~ → 処理の成功

  • 300~ → リダイレクト

  • 400~ → クライアントのエラー

  • 500~ → サーバーのエラー

 

上記を活用した一例として、

”インデックスページがリクエストすると正常にレスポンスが返ってくる状況”

をテストコードで記録しておくには、

 

get root_path (インデックスページを取得したときに)

expect(response.status).to eq 200 (ステータスは200が出るよ)

 

と定めておきます。

説明は終わりです。

 

 

補足:そもそもなんで定めるの?

”テストコードの意義”になりますが、「うまく行ったとき」「行かなかったとき」に、「こうなる」(example)を全て、VSコード上にテストコードとして書き残しておくことで、挙動の確認ができたり、アプリケーションの品質を担保したり、設計を読む解くことができます。

 

 

わからないこと(積み残し)

  • response.bodyの結果の見方

 

以上です!

誤っていた時は、ぜひコメントで教えてください!