Rails チュートリアルの覚書 part2 ※第三版第三章～


第2章お疲れさまでした。
またここから始められる方、共にがんばりましょう。
※不要と思われる箇所は飛ばしてます。きになる方はサイトを御覧ください
※前回の記事で記載ある重複しているものも飛ばしてます。
　
　
#前提条件と用意するもの
PC　※タブレットでも動作はするみたいですがPCにしましょう
cloud9のアカウント
→こちらはgithubのアカウントをお持ちであればすぐに作成できます
手を動かし続けれる方

以上です

#早速ですが第三章を始めます
　
1.cloud9にてworspaceを作成してください
作成したのち``rails new sample_app``を実行してください
※今回のプロジェクトはsample_appとします
　
　
2.Gemfileの編集
使用するgemを追記していきます。最終的には下記のようなGemfileにしてください
![tutprial2_gemfile_edit.jpg](https://qiita-image-store.s3.amazonaws.com/0/56087/8bb4816d-5909-a994-e82f-50f6fb1fdaef.jpeg)
※のちのち説明が入るので記載内容の説明は、省かせていただきます
※バージョンも合わせていただけたらと思います(動作確認済みのバージョンとなりますので)
　
　
3.お決まりのコマンド
では、Gemfileを編集したので、その後は必ず下記コマンドを実行します
``bundle update``※不要な場合もあります
``bundle install``
　
　
4.ではgithubにpushしましょう
新たにrepositoryを作成し、そこにpushを行います
終わりましたら作業用のbranchを作成し切り替えを行ってください
　
　
5.controllerの作成を行います
前回は、コードジェネレーター(コード自動生成機能)を使用しましたが今回は下記コマンドを実行してください
``rails g controller StaticPage home help ``
　
5−1.ここでスペル間違い等何かしらの間違いをしてしまった場合
``rails destroy controller名``
※同じくmodelの作成でも機能いたします
　
　
6.ひとまずサーバを立ち上げてみる
``rails s -p $PORT -b $IP``
上記コマンド実行後に表示されるポップアップのURLをクリックしアクセスしURLの末尾に/static_page/homeと入れてください
下記画像のように表示がされるかと思います。
![tutprial2_rails_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/56087/5e584c8b-07ae-e2ae-8895-84588343fd4f.jpeg)
　
　
7.ではviewのファイルの編集をします
app/views/home.html.erb
 
```erb:home.html.erb
<h1>Sample App</h1>
<p>This is the home page for the
    <a href="http://www.railstutorial.org">Ruby on RailsTutorial</a>
    sample application.
</p>
```
app/views/help.html.erb
 
```erb:help.html.erb
<h1>Sample App</h1>
<p>Get help on the Ruby on Rails Tutorial at the
    <a href="http://railstutorial.jp/help">Rails Tutorial help section</a>.
    To get help on this sample app,see the
    <a href="http://railstutorial.jp"><em>Ruby on RailsTutorialRailsTutorial</em>book.</a>
</p>
```
※画面はリロードすれば確認ができるかと思います
　
　
8.ここからはテスト駆動開発に少し触れつつ学んでいきます
開発に関してもそうですが、個人で何か作る際も最低限のテストが大切になってきます。
かつ以下にあるものは、画面にも出てくるようなエラー内容になってます。
こういったエラーとひたすら向き合うのもエンジニアとしてスタートした最初は大切になってきますので心が折れないようにがんばりましょう。
``~/workspace/sample_app(branch名)$ls test/controllers``
上記コマンド実行後
``static_pages_controller_test.rb``
と表示されれば問題ありません
　
　
8−1.先ほど確認が取れたファイルの中を見てみる
以下のような記述が書かれているかと思われます
 
```rb:static_pages_controller_test.rb
test "should get home" do
    get :home
    assert_response :success
end
```
testメソッドが内がtestの内容となります
getリクエストをhome(action)に対して発行(発信)すれば、リクエストに対し問題なくレスがあればassert_responseの右にあるsuccessが表示されるという処理になります
　
8−2.テストを行ってみる
``rake test``
上記コマンド実行後に以下のような返答があれば問題ない
Run options: --seed 12354
 Running:
Finished in 0.312928s, 6.3913 runs/s, 6.3913 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
 
この状態をGREENと呼びます
見ていただくとわかると思うのですが、0 failures, 0 errorsとありますこれは、testに引っかかった箇所がないことを意味します
　
　
8−3.異常ケースの確認
まず最初にapp側にないactionの記述をtest側のcontrollerに記述する
 
```rb:static_pages_controller_test.rb
test "should get help" do
    get :help
    assert_response :success
end
test "should get about" do#以下を追記
    get :about
    assert_response :success
end
```
上記のように記述を加えたら以下コマンドを実行
``rake test``
返答が以下のようなものが返ってくることが確認できる
1) Error:
StaticPagesControllerTest#test_should_get_about:
ActionController::UrlGenerationError: No route matches {:action=>"about", :controller=>"static_pages"}
test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'
3 runs, 2 assertions, 0 failures, 1 errors, 0 skips
先ほどと違いerrorsが1になっているのがわかると思います
これが異常ケース＝REDという言い方をします
　
　
8−4.結果をもとに修正を行っていきます
No route matchesと書かれている(赤字の箇所※こちらで色を付けてます)
→routeと一致してないよという認識で大丈夫です
ではrouteを追記してみます。config/routes.rbに以下を追記
 
```rb:routes.rb
get 'static_pages/about'
```
再度テストを実行します。``rake test``
〜略〜
AbstractController::ActionNotFound: The action 'about' could not be found for StaticPagesController
〜略〜
error内容が変わったのが確認できましたでしょうか？
次はaboutというactionが見当たらないよって怒られています
　
　
8-5.では、app/controller/static_pages_controller.rbを編集します

```rb:static_pages_controller.rb
def about
end
```
を追記します。※中の処理は空で問題ないです
再度テストを実行します　``rake test``