単体テストコード #3 (コントローラーのテスト)
テスト方針
modelのテスト: インスタンス生成 -> validチェック (データベースとのやりとりを確認)
controller: リクエストを送ってみて -> レスポンスをチェック (クライアントとのやりとりを確認)
Request Spec
RSpec内のコントローラー用のテストの手法
% rails g rspec:request tweets
spec/requests/tweets_spec.rb
生成
createメソッド (≒ build)
build: インスタンス生成のみ
create: 1回DBに保存。(からの毎回ロールバック。多用すると重くなるらしい。)
getメソッド
テスト内でリクエストを生成
(直後にbinding.pry
してみたが、すぐにレスポンスまで行われるっぽい)
request
get root_path binding.pry # requestでリクエストの中身を確認 [1] pry > request => <ActionDispatch::Request GET "http://www.example.com/" for 127.0.0.1>
response
# response でレスポンスを確認 [2] pry > response => @cache_control={:max_age=>"0", :private=>true, :must_revalidate=>true}, @committed=false, @cv=#<MonitorMixin::ConditionVariable:0x000000011587ae68 @cond=#<Thread::ConditionVariable:0x000000011587ae40>, @monitor=#<Monitor:0x000000011587b020>>, @header= {"X-Frame-Options"=>"SAMEORIGIN", ...(以下省略)
status
# response.status でステータスを確認。200が正常値。 [3] pry > response.status => 200 # 良く目にする「404ページが見つかりません」は、このHTTPステータスのこと(らしい)。
body
# response.body でHTML情報を(全部)確認 [4] pry > response.body => "<!DOCTYPE html>\n<html>\n <head>\n <title>Pictweet</title>\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n \n\n <link rel=\"stylesheet\" href=\"/assets/application-9b8e2e0d675fa110d5daab5bb6 ..."(以下省略)
show のルーティング
% reils routes
=>
tweet GET /tweets/:id(.:format) tweets#show
.../:id まで必要!
×
get tweet_path
○
get tweet_path(@tweet)
=>
FactoryBot.create(:tweet)
で保存した@tweet
を引数に指定することでidが取得される
英単語
CTO(なぜ今)
Chief Technical Officer: テクニカルな(技術)部門の責任者 -> 最高技術責任者
CEO(なぜ今)
Chief Exective Officer: 業務執行役員(エグゼクティブ)の中の責任者 -> 最高経営責任者
代表取締役(なぜ今)
会社法第349条で定められた会社の代表者。法的権限を有する。
(株式会社の代表)
第三百四十九条 取締役は、株式会社を代表する。ただし、他に代表取締役その他株式会社を代表する者を定めた場合は、この限りでない。
2 前項本文の取締役が二人以上ある場合には、取締役は、各自、株式会社を代表する。
3 株式会社(取締役会設置会社を除く。)は、定款、定款の定めに基づく取締役の互選又は株主総会の決議によって、取締役の中から代表取締役を定めることができる。
4 代表取締役は、株式会社の業務に関する一切の裁判上又は裁判外の行為をする権限を有する。
5 前項の権限に加えた制限は、善意の第三者に対抗することができない。
Request Spec まとめ
投稿されたデータがきちんと保存されていることを確認
-> 実際にデータをDBに保存して、HTMLにデータが出力されていることを確認- DBに保存 =
create
- HTMLへの出力確認 =
expect(response.body).to include(@tweet.text)
- DBに保存 =
投稿検索フォームの存在を確認 -> 投稿を検索するという文字列 が含まれることを確認。(それでいいの?)