Minitest
参考:
minitest-spec-rails
参考:
metaskills/minitest-spec-rails: Make Rails Use MiniTest::Spec! – GitHub
minitest-rails
参考:
blowmage/minitest-rails: Minitest integration for Rails – GitHub
ドキュメント
参考:
minitest Documentation [Official]
minitest-rails Documentation [Official]
Documentation for minitest | RubyDoc.info
Module: Minitest::Assertions — Documentation for minitest | RubyDoc.info
Class: Minitest::Spec — Documentation for minitest | RubyDoc.info
Module: Minitest::Spec::DSL — Documentation for minitest | RubyDoc.info
Documentation for minitest-spec-rails | RubyDoc.info
Documentation for minitest-rails | RubyDoc.info
Module: Minitest::Rails::Expectations — Documentation for minitest-rails | RubyDoc.info
minitest | command line ruby cheat sheets
使い方
require "minitest/autorun" class Sample def self.greeting "Hello, world!" end end class TestSample < Minitest::Test def test_greeting assert_equal "Hello, world!", Sample.greeting end end
参考:
標準のテスティングフレームワークで手軽にテストコードを書く方法 – Qiita
Minitest でテスト、Rails のテスト – Qiita
Rails のテストの仕方 Minitest 編 – Qiita
Minitest で始める Ruby のテスト | ようへいの日々精進 XP
Rails で Minitest を実行する | EatSmart システム部ブログ
Rails のテスト | Rails 日本語ドキュメント | Ruby STUDIO
テスト(test) | Railsドキュメント (railsdoc.com)
テストの書き方 | Rubyist Magazine (るびま)
Rails テスティングガイド | Rails ガイド [公式]
Minitest Setup for Rails | Motion Express
概要
参考:
minitest のオススメ基本設定調べてみた – Qiita
minitest のオススメ設定調べてみた アサーション編 – Qiita
導入
参考:
Minitest で rails のテストを書こう – Qiita
Rails のテストの仕方 Minitest 編 – Qiita
Minitest で始める Ruby のテスト | cloudpack.media
4+ Years of Using Minitest | Wojtek Mach
How I test Rails applications | Patrik on Rails
Use Minitest for Your Next Rails Project | mattbrictson.com
Minitest Cheat Sheet | Ruby Pigeon
比較
参考:
RSpec の開発者が語る、RSpec と Minitest の利点 | give IT a try
Ruby プログラマが一番よく使うテスティングフレームワークは RSpec のようです | give IT a try
RSpec と Minitest、使うならどっち? | Speaker Deck
My experience with Minitest and RSpec | Tenderlovemaking
Minitest and Rspec – Stack Overflow
書き方
参考:
Ruby MiniTest Cheat Sheet, Unit and Spec reference | danwin.com
テストを実行する
システムテスト以外のテストを全て実行する
$ rails test
システムテストを実行する
$ rails test:system
もしくは、
$ rails test test/system
全てのテストを実行する
$ rails test test:system
もしくは、
$ rails test test/*
参考:
Minitest でテスト、Rails のテスト – Qiita
Rails 5.1 で rails test と rails test:system の RAILS_ENV に関する挙動の違いメモ | satococoa’s blog
Test runner in Rails 5 | BigBinary Blog
rake コマンド
全てのテストを実行する。
$ rake test
ファイル・ディレクトリを指定してテストを実行する。
$ rake test TEST="test/system/*"
オプションを指定してテストを実行する。
$ rake test TESTOPTS="-v"
シードを指定してテストを実行する。
$ rake test TESTOPTS="--seed=1234"
もしくは、
$ rake test SEED=1234
参考:
rails で任意に minitest を実行する方法 – Qiita
モデルのユニットテストとテストコマンド | Serendip
class Rake::TestTask (Ruby 2.6.0)
Adding --verbose flag to rake test doesn’t do anything · Issue #13641 · rails/rails – GitHub
Fix TestTask verbose by mblumtritt · Pull Request #67 · ruby/rake – GitHub
Using the seed value from rake in unit and functional tests – Stack Overflow
-n オプション
参考:
minitest / spec で指定のテストだけを実行する | おもしろ web サービス開発日記
-p / --pride オプション
プログレスをカラフルに表示する。
$ rake test TESTOPTS="-p"
参考:
minitest/pride_plugin.rb at master · seattlerb/minitest – GitHub
Rails test does not recognize the `--pride` flag · Issue #23994 · rails/rails – GitHub
How to color unit tests with lib minitest or Test:Unit? – Stack Overflow
テストの実行順序
ランダムに実行する。(デフォルト)
config.active_support.test_order = :random
ソートして実行する。
config.active_support.test_order = :sorted
※ minitest-rails に対する設定 (ActiveSupport::TestCase
を継承した各テストクラス内での実行順序)
参考:
Test::Unit におけるテストの順番 | Alone Like a Rhinoceros Horn
test_order – ActiveSupport::TestCase | Ruby on Rails API [Official]
Pass config.active_support.test_order to minitest · Issue #205 · blowmage/minitest-rails – GitHub
フォーマッター
minitest-reporters
minitest-doc_reporter
minitest-documentation
参考:
kern/minitest-reporters: Create customizable MiniTest output formats – GitHub
jasonthompson/minitest-doc_reporter – GitHub
teoljungberg/minitest-documentation: Rspec like documentation formatter for Minitest – GitHub
minitest-doc_reporter
Gemfile
で追加する。
group :test do gem "minitest-doc_reporter" end
test_helpers.rb
で minitest/reporters
を require
し、use!
で使用するレポーターを指定する。
require "minitest/reporters" Minitest::Reporters.use!( Minitest::Reporters::SpecReporter.new )
参考:
jasonthompson/minitest-doc_reporter – GitHub
setup / teardown
参考:
Rails の Test::Unit で setup を定義する 3 つの方法 | passingloop
instance method MiniTest::Unit::TestCase#setup (Ruby 2.1.0)
4 Fantastic Ways to Set Up State in Minitest | Chris Said So
Method: Minitest::Test::LifecycleHooks#setup — Documentation for minitest | RubyDoc.info
Method: Minitest::Test::LifecycleHooks#teardown — Documentation for minitest | RubyDoc.info
テストの前に一度だけ初期化する/テストの終了処理をする
initialize
after_run
before(:all)
/after(:all)
:minitest-hooks を使う
参考:
How to do before(:all) / after(:all) in minitest | Ruslan writes code
4 Fantastic Ways to Set Up State in Minitest | Chris Said So
Can you support equivalent of rspec before(:all) · Issue #61 · seattlerb/minitest – GitHub
Before/After Suite when using Ruby MiniTest – Stack Overflow
minitest-hooks
参考:
jeremyevans/minitest-hooks: Around and before_all/after_all/around_all hooks for Minitest – GitHub
run
class CarTest < ActiveSupport::TestCase def run Car.stub(:drive, :safety) do super end end test "Car drives safely" do assert_equal :safety, Car.drive end end
参考:
Method: Minitest::Test#run — Documentation for minitest | RubyDoc.info
How can I stub in setup method with Minitest? – Stack Overflow
autorun
定義したテストを自動的に実行する。
require "minitest/autorun"
参考:
Unit tests – seattlerb/minitest – GitHub
Running Your Tests – seattlerb/minitest – GitHub
Method: Minitest.autorun — Documentation for minitest | RubyDoc.info
minitest/autorun.rb at e6bc448 · seattlerb/minitest – GitHub
autorun – minitest/minitest.rb at e6bc448 · seattlerb/minitest – GitHub
Specs
MiniTest::Spec
を使う。
require "minitest/spec"
もしくは、minitest-spec-rails を使う。
gem "minitest-spec-rails", group: :test
もしくは、minitest-rails を使う。
require "minitest/rails"
参考:
minitest で RSpec っぽくテストを書く方法 | Anonymous Function
Minitest でテスト、Rails のテスト – Qiita
Rails4 で書いたアプリを MiniTest::Spec でテストする | yo_waka’s blog
Class: Minitest::Spec — Documentation for minitest | RubyDoc.info
library minitest/spec (Ruby 2.1.0)
MiniTest::Spec
参考:
Class: Minitest::Spec — Documentation for minitest | RubyDoc.info
Module: Minitest::Spec::DSL — Documentation for minitest | RubyDoc.info
Module: Minitest::Spec::DSL::InstanceMethods — Documentation for minitest | RubyDoc.info
minitest-spec-rails
参考:
metaskills/minitest-spec-rails: Make Rails Use MiniTest::Spec! – GitHub
Rails4 で書いたアプリを MiniTest::Spec でテストする | yo_waka’s blog
Using MiniTest::Spec With Rails | MetaSkills.net
Spec style syntax with minitest in rails – Stack Overflow
minitest-rails
参考:
blowmage/minitest-rails: Minitest integration for Rails – GitHub
What’s the difference b/w minitest-rails and minitest-spec-rails? – Stack Overflow
Minitest::Rails::Expectations
参考:
Module: Minitest::Rails::Expectations — Documentation for minitest-rails | RubyDoc.info
RSpec Expectations を使う
RSpec の MiniTest 用拡張を読み込むことで、MiniTest 内で RSpec の expect
構文を使用できる。
require "rspec/expectations/minitest_integration"
参考:
Mixing and Matching Parts of RSpec | rspec.info
Minitest integration – RSpec Expectations | RSpec – Relish
rspec-expectations/minitest_integration.rb at v3.8.2 · rspec/rspec-expectations – GitHub
モジュールをインクルードする
参考:
Include module in all MiniTest tests like in RSpec – Stack Overflow
モック/スタブを使う
参考:
minitest で mock や stub を使う | おもしろ web サービス開発日記
minitest で stub, mock を使う | blog.jiikko.com
Mocking in Ruby with Minitest | Semaphore
Mocks & Stubs & Exceptions in Ruby | Josh Thompson
Test Doubles: in theory, in Minitest and in RSpec | Ilija Eftimov
Mock
Minitest::Mock
を直接 new
する。もしくは、Minitest::Mock
を継承したクラスを作成して使う。
mock = Minitest::Mock.new mock.expect(:call, true) expect( mock.call ).to be true mock.verify
Mock#expect
で呼ばれると期待されるメソッドを指定し、Mock#verify
で期待通りメソッドが呼ばれたことを検証する。
参考:
Class: Minitest::Mock — Documentation for minitest | RubyDoc.info
minitest/mock.rb at master · seattlerb/minitest – GitHub
expect
参考:
Method: Minitest::Mock#expect — Documentation for minitest | RubyDoc.info
verify
参考:
Method: Minitest::Mock#verify — Documentation for minitest | RubyDoc.info
stub
Car
のクラスメソッド drive
をスタブして safety
を返させる。
Car.stub(:drive, :safety) do expect( Car.drive ).to be :safety end
参考:
minitest でモジュールメソッドに stub を使う – Qiita
Method: Object#stub — Documentation for minitest | RubyDoc.info
How to test stub arguments · Issue #228 · seattlerb/minitest – GitHub
Stubbing method in ActionDispatch::IntegrationTest – Stack Overflow
How do I stub things in MiniTest? – Stack Overflow
モジュールメソッドをスタブする
参考:
minitest でモジュールメソッドに stub を使う – Qiita
定数をスタブする
参考:
Rails のテストで定数のスタブが欲しい場合 | tail -f pinzo.log
Method: Object#stub_const — Documentation for minitest-stub-const | RubyDoc.info
assert_select
参考:
Rails minitest controller にてある条件のタグがないことを判断する方法 – teratail
The opposite of assert_select? – Stack Overflow
skip
参考:
Minitest で特定のテストをスキップする方法 – Qiita
Is it possible to mark a test as pending in MiniTest? – Stack Overflow
file_fixture
参考:
Use file_fixture to access test files in Rails 5 | BigBinary Blog
テストケースを継承する
参考:
Liskov Principle & MiniTest | Wojtek Mach
ルーティングをテストする
参考:
How to write routing tests? · Issue #22 · metaskills/minitest-spec-rails – GitHub
How can I test Rails Routes with Minitest? – Stack Overflow
Is it still advisable to test routes in Rails 4 with Minitest? – Stack Overflow
エンジンの開発でテストを実行する
システムテスト以外のテストを全て実行する。
$ RAILS_ENV=test rails app:test
システムテストを実行する。
$ RAILS_ENV=test rails app:test:system
全てのテストを実行する。
$ RAILS_ENV=test rails app:test app:test:system
エンジンのコントローラーをテストする
参考:
isolated engine, routing helpers, testing? · Issue #6573 · rails/rails – GitHub
Rails Engine (4.0.2) routing methods fail in controllers using MiniTest – Stack Overflow
エンジンのテストで url_helpers を使う
エンジンのテストで url_helpers
を使うためには、テストクラスで MyEngine::Engine.routes.url_helpers
を include
する。
module MyEngine class ExpampleTest < ActionDispatch::IntegrationTest include Engine.routes.url_helpers test "should get index" do get example_index_url assert_response :success end end end
参考:
How to access URL helper from rails module – Stack Overflow
バリデーションのテスト
参考:
Rails Model test with minitest and fixture – Stack Overflow
Minitest::Assertions
参考:
Module: Minitest::Assertions — Documentation for minitest | RubyDoc.info
minitest-stub_any_instance
インスタンスメソッドをスタブする機能を提供する gem
参考:
stub any_instance using Minitest – Stack Overflow
Mocha
参考:
freerange/mocha: Mocha is a mocking and stubbing library for Ruby – GitHub
minitest-excludes
参考:
seattlerb/minitest-excludes – GitHub
minitest-stub-const
参考:
adammck/minitest-stub-const: Stub constants for the duration of a block in MiniTest – GitHub
Konacha
参考:
Combustion
参考:
pat/combustion: Simple, elegant testing for Rails Engines – GitHub
テストが失敗した場合にタスクがエラー終了する (仕様)
参考:
test_helper が読み込めない
test/test_helper.rb
が読み込めないエラーが発生する。
LoadError: cannot load such file -- test_helper
原因:
test_helper.rb
があるディレクトリにパスが通っていない。
対処法:
アプリケーションの場合
$LOAD_PATH.unshift File.expand_path("test", Rails.root)
エンジンの場合
$LOAD_PATH.unshift File.expand_path("test", MyEngine::Engine.root)
参考:
got “cannot load such file — test_helper” | Technotes
テストが二度実行される
参考:
Why is my minitest.rake running twice when I enter rake into terminal? – Stack Overflow
Why is my rake task running twice in my test? – Stack Overflow
チュートリアル
参考:
「Ruby on Rails on Minitest」を翻訳してみた | give IT a try
Tips
参考:
テストを不安定にする5つの残念な書き方 翻訳 | TechRacho