テスト
参考:
テスト (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!
参考:
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
- assert_changes
- assert_difference
- assert_no_changes
- assert_no_difference
- assert_not
- assert_nothing_raised
- file_fixture
参考:
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
参考:
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.rb
で allow_forgery_protection
を false
に設定する。
# 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
参考: