らくだ🐫にもできるRailsチュートリアル|5.3

5.3 レイアウトのリンク

‘#’でダミーリンクにしていた部分を書き換えていく。
<a href=”/static_pages/about”>About</a>の様に直接パスを指定するのではなく
Railsの慣習に倣った形式で記述していく
→<%= link_to “About”, about_path %>
埋め込みRuby Link_toヘルパー 表示される文字(第一引数),リンクのパス(第2引数)

about_pathとは何ぞ

名前付きルート(○○_path)
config/routes.rbで設定することで使えるようになる
(詳しくは5.3.2、5.3.3)

名前付きルートのいい所

Aboutページへのリンクを例に・・・
/static_pages/aboutの様にパスをしているすると、リンク先のパスに変更があった場合にすべての記述個所を修正しないといけない
about_pathで指定していれば、リンク先のパスに変更があってもroutes.rbで該当箇所を修正するだけでOK

5.3.1 Contactページ

3.4.3の演習でつくったものがそのまま残っているのでした。

5.3.2 RailsのルートURL

ルートURLの様にルーティングを定義するメリット
→名前付きルートを使えるようになる!→メソッドを通してURLを参照できる!

なお、Railsチュートリアルでは一般的な規約に従い、基本的には_path書式を使い、リダイレクトの場合のみ_url書式を使うようにします。これはHTTPの標準としては、リダイレクトのときに完全なURLが要求されるためです。

静的ページの名前付きルートを定義する

上記に倣ってroutes.rbを編集
static_pages_controller_test.rbの該当箇所も修正

尚ベースタイトルが略

演習

  1. 実は名前付きルートは、as:オプションを使って変更することができます。有名なFar Sideの漫画に倣って、Helpページの名前付きルートをhelfに変更してみてください (リスト 5.29)。
  2. 先ほどの変更により、テストが redになっていることを確認してください。リスト 5.28を参考にルーティングを更新して、テストを greenにして見てください。
  3. エディタのUndo機能を使って、今回の演習で行った変更を元に戻して見てください。

5.3.3 名前付きルート

名前付きルートを定義したので
本文に倣ってviewファイルのlink_toメソッドを書き換えていく

演習

  1. リスト 5.29のようにhelfルーティングを作成し、レイアウトのリンクを更新してみてください。
  2. 前回の演習と同様に、エディタのUndo機能を使ってこの演習で行った変更を元に戻してみてください。

2.リンクが作動することを確認してUndo

5.3.4 リンクのテスト

統合テストを使ってリンクが正しく動いているかをチェックする

統合テストとは

アプリケーションの動作を端から端まで (end-to-end) シミュレートしてテストするもの

レイアウトのリンクに対するテスト

  1. ルートURL (Homeページ) にGETリクエストを送る.
  2. 正しいページテンプレートが描画されているかどうか確かめる.
  3. Home、Help、About、Contactの各ページへのリンクが正しく動くか確かめる.

上記の内容をコード化していく

assert_selectメソッドとはなんぞ

様々なオプションを付けることが出来る便利で凄いメソッド(語彙)
RailsGuideの説明ページ
本文にあるassert_selectの使用例

Rakeタスクとは何ぞ

そもそもRakeとは?→Rubyで書かれたビルドツール(プログラムを制御・統合するもの)
RailsドキュメントのRakeとは のページ
Rakeタスクとは→Rakefileというファイルに一連の処理を定義したもの

そういうものがある、と言う事を覚えておく!

統合テストが通るかどうかは下記のコマンド(Rakeタスク)を実行する事で試せる

→統合テストが成功したらすべてのテストが成功するかも確認する

通常rake test:integrationで実行するものらしいし、調べた限りではrake test:integrationと出てくるですが
本文ではrails test:integrationなんですよね。
使い分け?とかどうなってるんでしょうか。はて。

→Rails5からrakeタスクをrailsコマンドで実行できるようになったとの事です。
勉強になりました!

演習

  1. footerパーシャルのabout_pathをcontact_pathに変更してみて、テストが正しくエラーを捕まえてくれるかどうか確認してみてください。
  2. リスト 5.35で示すように、Applicationヘルパーで使っているfull_titleヘルパーを、test環境でも使えるようにすると便利です。こうしておくと、リスト 5.36のようなコードを使って、正しいタイトルをテストすることができます。ただし、これは完璧なテストではありません。例えばベースタイトルに「Ruby on Rails Tutoial」といった誤字があったとしても、このテストでは発見することができないでしょう。この問題を解決するためには、full_titleヘルパーに対するテストを書く必要があります。そこで、Applicationヘルパーをテストするファイルを作成し、リスト 5.37のFILL_INの部分を適切なコードに置き換えてみてください。ヒント: リスト 5.37ではassert_equal <期待される値>, <実際の値>といった形で使っていましたが、内部では==演算子で期待される値と実際の値を比較し、正しいかどうかのテストをしています。

1.動作確認のみなので省略
2.↓

/sample_app/app/helpers/application_helper.rbと
/sample_app/test/controllers/static_pages_controller_test.rbの
ベースタイトル部分を「Ruby on Rails Tutoial」に変更してテストしてみる→GREEN
誤字が起こっているのにテストがGREEN!→full_titleヘルパーをテストする

→RED
エラーメッセージに沿って修正

assert_equalとはなんぞ

ユニットテストで使うメソッド(Railsドキュメント)
assert_equal(値1, 値2) →値1と値2が等しければ成功
値には変数も入る

まとめとか感想

名前付きルートはとても便利。

手元のコードと本文のコードで
「あれ?前回やった所はどこへ行ったの??」みたいなことがちょこちょこ起こるんだけど
なるべく手元のコードを優先で対応していけるようにしたい。

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けますと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです