0
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 3 years have passed since last update.

Rails チュートリアル 第3章 備忘録

Last updated at Posted at 2020-12-22

第3章の備忘録です。

環境

Rails 6.0.3
Ruby 2.6.3

##目次
1 コマンド操作で元に戻す方法
2 HTTPメソッド
3 空のメソッドでもRailsでは動作が異なる
4 デフォルトテストを解読
5 ルーティング
6 minitest reportersの導入
7 Guardのテスト自動化を導入

###1 コマンド操作で元に戻す方法
たまに起こるコマンド操作の失敗。誤ったファイルだけを削除すると、そのファイルを生成した時に別ファイルに挿入されたコードが残ってしまうため、コマンドで生成したモデルやコントローラーは、同様にコマンドで削除する必要がある。

# コントローラー作成
$ rails generate controller StaticPages home help

# コントローラー削除
$ rails destroy controller StaticPages home help

モデルの削除も同様に行うことが可能。

次はマイグレーション

# マイグレーションの変更(更新)
$ rails db:migrate

# マイグレーションを1つ前の状態に戻す
$ rails db:rollback

# マイグレーションを最初の状態(VERSION=0)に戻したい
$ rails db:migrate VERSION=0

VERSION番号はrails db:migrateするたびに設定されているため、別の数字に置き換え可能

###2 HTTPメソッド
HTTP(HyperText Transfer Protocol)はGET POST PATCH DELETEの4つの基本的操作がある。

GET POST PATCH Delete
ページを取得する フォームに入力された値を基に作成する 更新 削除

###3 空のメソッドの挙動
Railsでは空のメソッドであっても、動作が異なる

app/controllers/staticpages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end
  .
  .
end

このような場合でも、StaticPagesControllerクラスはApplicationControllerというRailsのクラスを継承しているため、/static_pages/homeにアクセスすると、home.html.erbというビューが表示される。

###4 デフォルトテストを解読

test/controllers/static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | Ruby on Rails Tutorial Sample App"
  end

  .
  .
end

このテストの確認は「アサーション(assertion:主張、断言)」と呼ばれる手法で、アクションをgetして正常に動作することを確認する。

上のテストの流れは、
1,homeアクションに対してGETリクエスト(ページを表示)
2,レスポンスが成功(200)になる
3,<title>タグに記述した文字列が表示されている

###5 ルーティング

config/routes.rb
Rails.application.routes.draw do
  root 'static_pages#home'
  get 'static_pages/home'
  .
  .
end

rootルーティングを設定すると、root_urlというRailsヘルパーが使えるようになる。

###6 minitest reportersの導入
minitest reportes を導入すると、テスト結果が色付きで表示される。

Gemfile
.
group :test do
  .
  gem 'minitest', 'バージョン'
  gem 'minitest-reportes', 'バージョン'
  .
end
.
test/test_helper.rb
.
require 'rails/test_help'
require "minitest/reportes"
Minitest::Reportes.use!
.
.

###7 Guardのテスト自動化を導入
Guardを設定することで、例えばhome.html.erbを変更したらstatic_pages_controller_test.rbが自動的に実行される。

Gemfile
.
group :test do
  .
  gem 'minitest-reportes', 'バージョン'
  gem 'guard', 'バージョン'
  gem 'guard-minitest', 'バージョン'
end
.
.

#####初期化を行う

$ bundle exec guard init

生成されたGuardfileをカスタマイズしていくがここは割愛。
Rspecを使う場合などで設定が変わるので、Rail Tutorialではテキスト通り進めるが、後々は自分で設定を行っていきたい。

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

クラウドIDEの場合は、上の2行のコマンドを実行してプロジェクト内の全ファイルをGuardで監視できるよう設定

$ bundle exec guard

最後に新しいターミナルで上のコマンドを実行し、起動させる。

$ bin/spring stop
$ bundle exec guard 

もしテストが不必要に失敗する場合は、上のコマンドで再起動を行う。
Spring : Railsの情報を事前に読み込み、テストを高速化させるツール

0
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
0
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?