第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では空のメソッドであっても、動作が異なる
class StaticPagesController < ApplicationController
def home
end
.
.
end
このような場合でも、StaticPagesControllerクラスはApplicationControllerというRailsのクラスを継承しているため、/static_pages/homeにアクセスすると、home.html.erbというビューが表示される。
###4 デフォルトテストを解読
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 ルーティング
Rails.application.routes.draw do
root 'static_pages#home'
get 'static_pages/home'
.
.
end
rootルーティングを設定すると、root_urlというRailsヘルパーが使えるようになる。
###6 minitest reportersの導入
minitest reportes を導入すると、テスト結果が色付きで表示される。
.
group :test do
.
gem 'minitest', 'バージョン'
gem 'minitest-reportes', 'バージョン'
.
end
.
.
require 'rails/test_help'
require "minitest/reportes"
Minitest::Reportes.use!
.
.
###7 Guardのテスト自動化を導入
Guardを設定することで、例えばhome.html.erb
を変更したらstatic_pages_controller_test.rb
が自動的に実行される。
.
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の情報を事前に読み込み、テストを高速化させるツール