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

【Rails】Guardによるテスト自動化の設定【Rails Tutorial 3章まとめ】

Last updated at Posted at 2019-11-26

##GemfileにGuardを導入

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

テストグループ内に導入する。
minitestも一緒に入れとくと良さげ。

##Guardの初期化とGuardfileの編集

$ bundle exec guard init

初期化するとルートライブラリにGuardfileが生成される。

Guardfile.rb
# Guardのマッチング規則を定義
guard :minitest, spring: "bin/rails test", all_on_start: false do
  watch(%r{^test/(.*)/?(.*)_test\.rb$})
  watch('test/test_helper.rb') { 'test' }
  watch('config/routes.rb')    { integration_tests }
  watch(%r{^app/models/(.*?)\.rb$}) do |matches|
    "test/models/#{matches[1]}_test.rb"
  end
  watch(%r{^app/controllers/(.*?)_controller\.rb$}) do |matches|
    resource_tests(matches[1])
  end
  watch(%r{^app/views/([^/]*?)/.*\.html\.erb$}) do |matches|
    ["test/controllers/#{matches[1]}_controller_test.rb"] +
    integration_tests(matches[1])
  end
  watch(%r{^app/helpers/(.*?)_helper\.rb$}) do |matches|
    integration_tests(matches[1])
  end
  watch('app/views/layouts/application.html.erb') do
    'test/integration/site_layout_test.rb'
  end
  watch('app/helpers/sessions_helper.rb') do
    integration_tests << 'test/helpers/sessions_helper_test.rb'
  end
  watch('app/controllers/sessions_controller.rb') do
    ['test/controllers/sessions_controller_test.rb',
     'test/integration/users_login_test.rb']
  end
  watch('app/controllers/account_activations_controller.rb') do
    'test/integration/users_signup_test.rb'
  end
  watch(%r{app/views/users/*}) do
    resource_tests('users') +
    ['test/integration/microposts_interface_test.rb']
  end
end

# 与えられたリソースに対応する統合テストを返す
def integration_tests(resource = :all)
  if resource == :all
    Dir["test/integration/*"]  else
    Dir["test/integration/#{resource}_*.rb"]
  end
end

# 与えられたリソースに対応するコントローラのテストを返す
def controller_test(resource)
  "test/controllers/#{resource}_controller_test.rb"
end

# 与えられたリソースに対応するすべてのテストを返す
def resource_tests(resource)
  integration_tests(resource) << controller_test(resource)
end

springサーバーを使用するようにマッチング規則(?)を書き換える。

##gitignoreの編集

# Ignore Spring files.
/spring/*.pid

gitとspringが競合するらしい(意味はわかってない)ので、gitignoreに上の二行を記述。

##Guardを起動

bundle exec guard

コンソールを新規に開いてGuardを起動。
Returnキーで手動実行できる。
Ctrl+Dで終了する。

##デスクトップに結果を通知
こちらの記事を参考にさせていただきました。
「Mac OSX El CapitanでGuardからテスト結果の通知を受け取ってデスクトップに表示する」
http://b0npu.hatenablog.com/entry/2016/04/17/155457

$brew search terminal-notifier
$brew install terminal-notifier

Homebrewでterminal-notifierをインストール。

Gemfile.rb
group :development do
  gem 'terminal-notifier-guard', '~> 1.6.1'
end

deveropmentグループにterminal-notifier-guardを導入して、bundle install。
Guardを起動して適当にファイルを変更すると...

スクリーンショット 2019-11-26 21.33.02.jpg

ちゃんとデスクトップ通知が来た🐳

##springのkill

テストが重くなってきたら、プロセスを確認してspringをkillする。

  $ ps aux | grep spring
    ec2-user 12241 0.3 0.5 589960 178416 ? Ssl Sep20 1:46
    spring app | sample_app | started 7 hours ago
  $ kill -15 12241

  $ pkill -15 -f spring

最初の数字(プロセスid、pid)で指定する。
spring関係を一括でkillするにはpkillを使う。

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?