mainvisual

久しぶりの更新です。一ヶ月程、「Rialsチュートリアル」を休んでいましたが、きょういよいよ第3章を始めます。

今日、することは

  • 「コントローラー」「ビュー」の関係
  • テスト
  • viewの簡単な使い方

についてです。「テスト」についてが解説の半分以上を占めています。

準備

環境を準備します。前回からの続きです。次回はこちら。 新たに「turorial-chapter3」ブランチを作成して作業をしていきます。

$ git checkout turorial-chapter2
$ git checkout -b turorial-chapter3

README.mdの更新

まず初めに、英語で書かれたREADMEを日本語にしてしまいます。内容はrailstutorialからまんまコピーをしました。

静的ページの生成

静的ページを管理するcontroller, viewなどを生成します。

$ rails generate controller StaticPages home help about

この状態で、アクセスが可能かをチェックします。

$ rails server

ビューの更新

app/views/layout/application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

app/views/static_pages/home.html.erb

<% provide(:title, "Home") %>
<h1>About</h1>
<p>
  The <a href="http://railstutorial.jp/"><em>Ruby on Rails Tutorial</em></a>
  is a <a href="http://railstutorial.jp/book">book</a> and
  <a href="http://screencasts.railstutorial.org/">screencast series</a>
  to teach web development with
  <a href="http://rubyonrails.org/">Ruby on Rails</a>.
  This is the sample application for the tutorial.
</p>

app/views/static_pages/help.html.erb

<% provide(:title, "Help") %>
<h1>Help</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/book"><em>Ruby on Rails Tutorial</em>
  book</a>.
</p>

app/views/static_pages/about.html.erb

<% provide(:title, "About") %>
<h1>About</h1>
<p>
  The <a href="http://railstutorial.jp/"><em>Ruby on Rails Tutorial</em></a>
  is a <a href="http://railstutorial.jp/book">book</a> and
  <a href="http://screencasts.railstutorial.org/">screencast series</a>
  to teach web development with
  <a href="http://rubyonrails.org/">Ruby on Rails</a>.
  This is the sample application for the tutorial.
</p>

ビューの解説

erbで使うタグには、2種類あります。

タグ 説明
<% .. %> 結果を表示しない
<%= .. %> 結果を表示する

また、provide()で、シンボルと値を結びつけることが出来ます。

テストについて

Gemfileに次を追加しました。

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

bundle installを実行します。テストの内容はこのようにしました。

test/test_helper.rb

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
Minitest::Reporters.use!

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

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 root" do
    get root_url
    assert_response :success
  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

end

テストはどのようにいつ書けばよいか

テストはHTMLの内容から、ヘルパー関数まであらゆる内容を対象としています。しかし、頻繁に内容を変更したり、することも少なくないと思います。そのような場合、いつもテストを書き直して行くのは非効率的です。

railstutorialでは、テストを行なう上でよい考え方がが書かれた内容がありました。とても参考になるので、一読してみると良いでしょう。

routeの設定

config/routes.rb

Rails.application.routes.draw do
  root 'static_pages#home'
  get  'static_pages/home'
  get  'static_pages/help'
  get  'static_pages/about'
end

再現

この記事の状況を再現するには、

$ git clone https://github.com/k4zzk/railstutorial.git
$ cd railstutorial
$ git checkout ae22ecafe9973eeab072de89930def0829faa8d3

を実行して下さい。

comments powered by Disqus