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の結果の見方
以上です!
誤っていた時は、ぜひコメントで教えてください!