テスト

参考:

テスト (test) | Railsドキュメント (railsdoc.com)

Rails テスティングガイド | Rails ガイド [公式]

Rails のテスト | Rails 日本語ドキュメント (Ruby STUDIO)

Getting Started With Testing In Rails (Using Minitest and RSpec) | Ethan Ryan

rails test コマンド

テストを実行する。

$ rails test

参考:

rails/test_command.rb at v5.2.2 · rails/rails – GitHub

Rake タスク

テストを実行する。

$ rake test

参考:

rails/testing.rake at v5.2.2 · rails/rails – GitHub

Rake::TestTask

参考:

rake/testtask.rb at v12.3.2 · ruby/rake – GitHub

IntegrationTest

ルーティングを再読み込みする。

app.reload_routes!

セッションをリセットする。

reset!

参考:

結合テスト | Rails ガイド [Official]

ActionDispatch::IntegrationTest | Ruby on Rails API [Official]

ActionDispatch::Integration | Ruby on Rails API [Official]

IntegrationTest – rails/integration.rb at v5.2.2.1 · rails/rails – GitHub

reset! – ActionDispatch::Integration::Runner | Ruby on Rails API [Official]

Integration::Session

参考:

ActionDispatch::Integration::Session | Ruby on Rails API [Official]

ActionDispatch::Integration::RequestHelpers | Ruby on Rails API [Official]

ActionDispatch::Integration::Runner | Ruby on Rails API [Official]

ActionController::TemplateAssertions | Ruby on Rails API [Official]

Integration::Session – rails/integration.rb at v5.2.2.1 · rails/rails – GitHub

エンジンの結合テストにおける url_helpers

参考:

isolated engine, routing helpers, testing? · Issue #6573 · rails/rails – GitHub

ActionController::TestCase

**DEPRECATED**

Rails 5.1 で ActionDispatch::IntegrationTest が導入されたため使われなくなった。非推奨。ActionDispatch::IntegrationTest に切り替え。

参考:

ActionController::TestCase | Ruby on Rails API [Official]

ActiveSupport::TestCase

参考:

ActiveSupport::TestCase | Ruby on Rails API [Official]

ActiveSupport::Testing::Assertions | Ruby on Rails API [Official]

ActiveRecord::TestFixtures | Ruby on Rails API [Official]

ActiveSupport::Testing::FileFixtures | Ruby on Rails API [Official]

ActiveSupport::Testing::TimeHelpers | Ruby on Rails API [Official]

rails/assertions.rb at v5.2.2.1 · rails/rails – GitHub

ルーティングのテスト

参考:

ActionDispatch::Assertions::RoutingAssertions | Ruby on Rails API [Official]

rails/routing.rb at v5.2.2.1 · rails/rails – GitHub

How can I assert that no route matches in a Rails integration test? – Stack Overflow

UrlGenerationError

参考:

parameter とルーティングエラーについて – Qiita

RoutingError

参考:

No route matches [PATCH] が解決できない | teratail

ActionController::RoutingError: No route matches […] · Issue #671 · rspec/rspec-rails – GitHub

Rspec no route matches – Stack Overflow

テスト用データベースの準備

config/database.yml に定義したデータベースを全て作成する。

$ rails db:create:all

test 環境のデータベースで未実行のマイグレーションを全て実行する。

$ RAILS_ENV=test rails db:migrate

test 環境のデータベースを再構築する。(テーブルを全て破棄してdb/schema.rb をロードする。)

$ rails db:test:prepare

参考:

RSpec でテストデータベースの準備 – Qiita

Rails の rake db コマンドリスト – Qiita

Rails でテスト用 DB のテーブル定義が開発環境と違う時に打つコマンド | ウェブエンジニア珍道中

Rake で実行できる Rails 環境でのテストタスク | ぢみへんプログラミング日誌

rake db:test:prepare ってどこでどういうふうに定義されているんだろう · Issue #965 · yochiyochirb/meetups – GitHub

テストデータベースのスキーマを管理する | Rails ガイド [公式]

rails/database_tasks.rb at v5.2.2 · rails/rails – GitHub

db:test:prepare – rails/engine.rake at v5.2.2 · rails/rails – GitHub

db:test:prepare – rails/databases.rake at v5.2.2 · rails/rails – GitHub

load_schema_if_pending! – rails/migration.rb at v5.2.2 · rails/rails – GitHub

rake db:create vs rake db:create:all – Stack Overflow

What does rake db:test:prepare actually do? – Stack Overflow

警告の表示を抑制する

Rake::TestTask.new(:test) do |t|
  # ...
  t.warning = false
  # ...
end

もしくは、

Rake::TestTask.new(:test) do |t|
  # ...
  t.ruby_opts = %w[ -W0 ]
  # ...
end

もしくは、コマンドライン実行時にオプションを指定する。

$ rake test RUBYOPT=W0

参考:

instance method Rake::TestTask#warning= (Ruby 2.6.0)

instance method Rake::TestTask#ruby_opts= (Ruby 2.6.0)

rake/testtask.rb at v12.3.2 · ruby/rake – GitHub

Lot of warnings when run ‘rake test’ w/minitest · Issue #123 · hanami/utils – GitHub

Suppress Ruby warnings when running specs – Stack Overflow

Exclude external gem warnings when running rake test in Rails – Stack Overflow

Suppress Ruby warnings when running specs – Stack Overflow

特定のフォルダのテストをスキップする

FileList クラスの exclude メソッドを使う。

Rake::TestTask.new(:test) do |t|
  # ...
  t.test_files = \
    FileList["test/**/*_test.rb"]
    .exclude("test/system/**/*")
  # ...
end

参考:

Excluding specific tests with rake | chuyeow

rake task that make any test tools exclude a specific pattern – GitHub Gist

instance method Rake::FileList#exclude (Ruby 2.5.0)

singleton method Rake::FileList.[] (Ruby 2.5.0)

class Rake::FileList (Ruby 2.5.0)

How to skip some test folder when running rake test – Stack Overflow

Rake::TestTask

参考:

class Rake::TestTask (Ruby 2.5.0)

rake/testtask.rb at v12.3.2 · ruby/rake – GitHub

RSpec

参考:

初心者が Rails + Devise で Todo アプリ作る Rubocop・RSpec・Travis CI | freedom-man

パフォーマンス

参考:

Rails のテスト実行時間を1/3まで短縮した話 (Rspec + CircleCI) | AnyPay Tech Blog

allow_forgery_protection

テスト環境で CSRF を無効にするには、config/environments/test.rballow_forgery_protectionfalse に設定する。

# config/environments/test.rb
config.action_controller.allow_forgery_protection = false

参考:

ログインの integration test で失敗する原因 | Pebble Coding

Integration test で but rendering with , 422 エラー – Qiita

Cross-Site Forgery Protection in Rails Tests | Jaco Pretorius

rails test passing CSRF token only in get requests – Stack Overflow

RSS のテスト

参考:

How to test an RSS feed, with cucumber or rspec – Stack Overflow

rails/test_help

参考:

rails/test_help.rb at v5.2.2.1 · rails/rails – GitHub

Rails::TestUnit::Runner

参考:

rails/runner.rb at v5.2.2.1 · rails/rails – GitHub

rails/autorun.rb at v5.2.2.1 · rails/rails – GitHub

Tips

参考:

テストを不安定にする5つの残念な書き方 翻訳 | TechRacho

TestProf

参考:

palkan/test-prof: Ruby Tests Profiling Toolbox – GitHub

Blade

A Sprockets Toolkit for Building and Testing JavaScript Libraries

参考:

javan/blade – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です