”自分メモ”  railsチュートリアル　testの流れとcontroller、ルーター、アクション。備忘録

#演習を通してテストの一連の流れを少し感じれたため自分メモ

**目的:サンプルアプリケーションにContact (問い合わせ先) ページを新しく作成する**



--------------------------------------------------------
以下、やったことの手順

まずはリスト 3.15を参考にして、/static_pages/contactというURLのページに「Contact | Ruby on Rails Tutorial Sample App」と***タイトル***が存在するかどうかを確認するテストを最初に作成する

#1.test/controllers/static_pages_controller_test.rbを書き換える

```static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | #{@base_title}"
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | #{@base_title}"
  end

  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | #{@base_title}"
  end

  test "should get contact" do   ➡️ここから　　　
    get static_pages_contact_url
    assert_response :success
    assert_select "title", "Contact | Ruby on Rails Tutorial Sample App"
  end
end
```
↓
このテストで使っているassert_selectメソッドでは、特定のHTMLタグが存在するかどうかをテストする
>rails tを実行。





書き換えたが、エラー
`NameError: undefined local variable or method` `static_pages_contact_url'`
**コンタクトのurlないよ**といわれた。

↓
なのでurlを作る。

**(urlを作成するときはroute.rb）**。。。。でいいのかな


#2.route.rbを書き換える　

```route.rb

Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  get  'static_pages/about'
  get  'static_pages/contact'  ⬅️この部分を追記した/以下がurl
 root 'application#hello'
 end
end
```
↓

>ふたたび　rails tを実行

↓
`AbstractController::ActionNotFound: The action 'contact' could not be found for StaticPagesController`
今度はアクションが見つからないと言ってる。StaticpagesControllerのためのcontactアクションがない。
↓
じゃあ今度はアクションを作ります。


”アクション”　を　”コントローラー”　ファイルで作成できます。



#3.static_pages_controller.rbを編集する
今、static pagesのテストを実行していたので、編集するのはstatic_pages_controller.rbです

アクションを定義するのは`def`という部分です。

`def アクション名`なので、今回は `def contact`です。


```staticpages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end

  def help
  end

  def about
  end

  def contact     ➡️アクション名　contact
  end
end
```



↓
>rails  tを実行したがエラー

`ActionController::UnknownFormat: StaticPagesController#contact is missing a template for this request format and variant.`
フォーマットがみつからない、テンプレートがないと言ってます。
↓
次はテンプレートです。

>Railsでは、テンプレートとはすなわち「ビュー」を指す、とある。3.2.1参照（3.2.1はチュートリアルのチャプターです）
***home***というアクションは***home.html.erb***というビューに関連付けられます。

この"ビュー"はapp/views/static_pagesディレクトリにあるので、ここにcontact.html.erbというファイルを作ればよさそうです。
***テンプレートや画面の生成はviewが管理する。MVC。***

↓

#4.viewの作成(contact.html.erbファイルを作る）
・・・ファイルつくる？ってしばらく固まりましたが、
コマンドライン、コマンドの**touch**を使えばファイルを作成できるんでした。
（エディタでもできるみたいですがわからないから勉強した方でやります）

`$　touch app/views/static_pages/contact.html.erb`を実行。　

contact.html.erbができました。（view/static_pages/contact.html.erb）

↓
contact fileを見本のものに書き換えます。

```contact.html.erb
<% provide(:title, "Contact") %>
<h1>Contact</h1>
<p>
  Contact the Ruby on Rails Tutorial about the sample app at the
  <a href="https://railstutorial.jp/contact">contact page</a>.
</p>
```


↓
>rails  tの結果・・・・greenです！やったーー！

rails sして、検索バーで/contactに飛んでリンクを踏んでみると、チュートリアルの問い合わせのページに飛びました!成功でしょう！
![スクリーンショット 2018-11-13 17.46.42.png](https://qiita-image-store.s3.amazonaws.com/0/284608/ba3ddf57-c76b-5825-86b4-68dada4e956d.png)
![スクリーンショット 2018-11-13 17.48.06.png](https://qiita-image-store.s3.amazonaws.com/0/284608/8f21f9dc-9f58-eedb-2388-e4da64e22de4.png)

#〜学んだことの確認〜

テストはテストファイルにて変更できる
rails tのエラーメッセージに沿ってファイルを作っていくのかな？実際開発ってこうなのかな？
（テストでredを出して、それを潰していくような感じ？）
ルーターとコントローラーの関係はもっと練習。
埋め込みRubyとやらは、動画で確認。