今日のお勉強 0821 テストコードなど
分からないこといっぱい。
・配列の呼び出しコード
note = ["a","b","c"]の各要素を#{}で呼び出したいときは、#{ note[配列番号] }で呼び出す。
・モデルとコントローラーのテストコードの違い
モデルではインスタンスを生成し、モデルに想定した通りの挙動になるかを調べる。データベースとの照合。
コントローラーではアクションにリクエストを送り、想定通りのレスが帰ってくるかを調べる。クライアントとの照合。
テストに必要なデータベースはcreateで保存できるが、一回のテストが実行されるたびにロールバックされ、初期化されてしまう。
・テストコードの実行
bundle exec rspec /パス で実行できる。
・テストコードで〇〇のパスにリクエストを送信するにはget 〇〇_pathを使う。
・レスポンスの有無の確認の仕方
binding.pryで停止させたところにresponse.statusを入力し、出てくる数値で判断する。200が出たら正常に動作している証拠。
expect(response.status).to eq 200
・コンテンツの有無の確認の仕方。
binding.pryで停止させたところにresponse.bodyを入力する。投稿内容等が含まれているかを確認するには特定の値がincludeされているかをexpectを用いて確かめる。
expect(response.body).to include(インスタンス変数の指定)
・visit
実際にそのページへ遷移するためのコード。getはリクエストを送るだけなので、この点で違いがある。
・visitを使うときのマッチャ
実際にそのページに遷移しているときはexpectの引数はpage、マッチャはhave_content('~')で確認する
・検証の際にはfill_in 'フォームの名前', with: '入力する文字列'を用いることでフォームへの入力を行うことができる
・検証の際にはfind('クリックしたい要素').clickを用いることで擬似的にクリック動作を再現できる。
・マッチャにchangeを用いる場合はexpect()ではなくexpect {}になる。要注意。
・expectの中の要素で、current_pathを用いると現在のページのパスの情報を取得できる。
expect(curremt_path).to eq(root_path)で現在のパスがroot_pathであることを確かめられる。
・カーソルを合わせる動作のことをhoverという。find('hoverしたい要素').hoverで再現できる。
・コンテンツがある場合を確かめるにはhave_content、ない場合を確かめるにはhave_no_contentを用いる。
・have_selectorはCSSのセレクタ内に特定の要素があるかどうかを検索するもので、have_content,have_no_contentはページ内の特定の要素の有無を調べるという動きとは全く違うものである。
・have_linkはa要素に対して用いるマッチャ。当てはまるリンクの有無を検索できる。
・要素検索の対象が複数ある場合(すべての要素に同名のクラスが与えられているなど)の時は、findではなくallを用いることで要素を取得できる。その際はall('クラス名')[0]のように記述すると、0番目の〇〇クラスを指定したことになる。
・find_link().clickはa要素で表示されているリンクをクリックするためのコード。find().clickと違ってa要素にしか反応しない。
・テストコードの重複表現はサポートモジュールでまとめることができる。
specディレクトリの配下にsupportというディレクトリを作成し、〇〇_support.rbというファイルを作成することで導入できる。
加えて、rails_helper.rbのsupportに関する部分のコメントアウトを解除し、configの部分にconfig.include (サポートモジュール名)を入力する必要がある。