kouの技術的メモ

学習した内容の定着やアウトプット用に開設しました

Railsチュートリアル3章

Railsチュートリアルで覚えが悪かったところや、分かりにくかったところの更なる理解を目的としてブログを書いていこうと思います。 僕のように今RubyRails勉強中という初学者の方も多いと思うので、多少はそういう方の参考になればいいなと。 基本的には全体の要約というよりは、自分の気になること、理解に時間の掛かった部分をざっくりまとめる形式にしていこうと思います。 その方が僕の力になると思うからです。

Railsチュートリアルはいきなりやると難しいとの話だったので、ProgateのRuby/Railsコース完了済みです

環境構築を除き、これまではprogateで学習済みの内容だったんですが、ここにきて初めての内容。 Rails初テスト。Rilsチュートリアルテスト駆動開発(TDD)と言う手法で記述されています。 node.jsのExpressにて単体テスト/統合テストはやったことがあるが、Railsにおいては初めてなので、多少進みが遅くなる

コントローラーテストの基本文

  test "テスト名" do
    get static_pages_help_url     //GETリクエストをhomeアクションに対して発行
    assert_response :success                 //バグがなければリクエストに対するレスポンスはsucsessになる
  end

となる。

<!DOCTYPE html>
<html>
  <head>
    <title>Greeting</title>
  </head>
  <body>
    <p>Hello, world!</p>
  </body>
</html>

htmlの基本構造はだいたいこうなのですが、例えば上記のhtmlのtitleにきちんと望む内容が含まれているかどうかのテストは

assert_selectメソッドを使い

  test "テスト名" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "含まれているかテストしたいhtmlの内容"

assert_selectメソッドでは、特定のHTMLタグが存在するかどうかをテストします 。

次にリファクタリングについて。

テスト駆動開発においてはREDGREENリファクタリング

つまり、まず一番最初にテストを記述して、そのテストが失敗するコード、成功するコード、より保守のしやすいきれいなコードに書き直すという順に作っていくのですが、そのコードを書き直すという部分。

重複する部分をapplication.html.erbの<%= yield%>にまとめてしまう。

テストを先に書いておくと、リファクタリングをするときもバグを未然に防げて安心できる。

最後に テスト時、成功/失敗の色表示で見やすくしてくれる「minitest reporters 」と、ファイルの変更を検出して必要なテストだけを自動実行してくれる「Guard」を追加。

「minitest reporters 」はtest/test_helper.rbに追加記述するだけ。

「Guard」は初期化コマンドを実行し、

bundle exec guard init

cloud9環境なのでtmuxをインストール sudo yum install -y tmux

Guardは他のターミナルに

bundle exec guard

と打つことでテスト環境を走らせ、ファイルを変更するとリアルタイムにテストしてくれるすごいやつです。 Return(Enter)キーを打つとフルでテストしてくれ、Ctrl+Dで終了。

以上で3章は終了です。