1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-13

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

目的:サンプルアプリケーションに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
スクリーンショット 2018-11-13 17.48.06.png

#〜学んだことの確認〜

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?