#演習を通してテストの一連の流れを少し感じれたため自分メモ
目的:サンプルアプリケーションにContact (問い合わせ先) ページを新しく作成する
以下、やったことの手順
まずはリスト 3.15を参考にして、/static_pages/contactというURLのページに「Contact | Ruby on Rails Tutorial Sample App」とタイトルが存在するかどうかを確認するテストを最初に作成する
#1.test/controllers/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を書き換える
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
です。
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を見本のものに書き換えます。
<% 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に飛んでリンクを踏んでみると、チュートリアルの問い合わせのページに飛びました!成功でしょう!
#〜学んだことの確認〜
テストはテストファイルにて変更できる
rails tのエラーメッセージに沿ってファイルを作っていくのかな?実際開発ってこうなのかな?
(テストでredを出して、それを潰していくような感じ?)
ルーターとコントローラーの関係はもっと練習。
埋め込みRubyとやらは、動画で確認。