Minitest

参考:

seattlerb/minitest: minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking – GitHub

blowmage/minitest-rails: Minitest integration for Rails – GitHub

ドキュメント

参考:

minitest Documentation [Official]

minitest-rails Documentation [Official]

Documentation for minitest | RubyDoc.info

Documentation for minitest-rails | RubyDoc.info

使い方

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 テストコマンド – Qiita

Rails で Minitest を実行する | EatSmart システム部ブログ

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

テスト(test) – – Railsドキュメント

テストの書き方 | Rubyist Magazine (るびま)

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

Minitest Setup for Rails | Motion Express

概要

参考:

minitest のオススメ基本設定調べてみた – Qiita

Minitest 調べてみた | SlideShare

導入

参考:

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

比較

参考:

rspec と minitest の比較 – Qiita

RSpec の開発者が語る、RSpec と Minitest の利点 | give IT a try

Ruby プログラマが一番よく使うテスティングフレームワークは RSpec のようです 2018年3月調べ | 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"

もしくは、

$ SEED=1234 rake test

参考:

rails で任意に minitest を実行する方法 – Qiita

モデルのユニットテストとテストコマンド | Serendip

class Rake::TestTask (Ruby 2.5.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 オプション

プログレスをカラフルに表示する

参考:

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

テストの実行順序

※ minitest-rails に対する設定 (ActiveSupport::TestCase 内での実行順序)

ランダムに実行する (デフォルト)

config.active_support.test_order = :random

ソートして実行する

config.active_support.test_order = :sorted

参考:

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.rbminitest/reportersrequire し、使用するレポーターを宣言する。

require "minitest/reporters"
Minitest::Reporters.use! \
  Minitest::Reporters::SpecReporter.new

参考:

jasonthompson/minitest-doc_reporter – GitHub

setup / teardown

参考:

Rails の Test::Unit で setup を定義する 3 つの方法 | passingloop

Test::Unit でテストを書く – Qiita

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

テストの前に一度だけ初期化する

参考:

How to do before(:all)/after(:all) in minitest | Ruslan writes code

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

参考:

Method: Minitest::Test#run — Documentation for minitest | RubyDoc.info

How can I stub in setup method with Minitest? – Stack Overflow

Specs

MiniTest::Spec を使う

require "minitest/spec"

もしくは、minitest-rails を使う

require "minitest/rails"

参考:

minitest で RSpec っぽくテストを書く方法 | Anonymous Function

Minitest でテスト、Rails のテスト – Qiita

Rails4 で書いたアプリを MiniTest::Spec でテストする | yo_waka’s blog

Specs – seattlerb/minitest: minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking – GitHub

Class: Minitest::Spec — Documentation for minitest | RubyDoc.info

library minitest/spec (Ruby 2.1.0)

minitest-spec-rails

参考:

metaskills/minitest-spec-rails: Make Rails Use MiniTest::Spec! – GitHub

Rails4 で書いたアプリを MiniTest::Spec でテストする | yo_waka’s blog

RSpec Expectations を使う

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

Mock

参考:

Class: Minitest::Mock — Documentation for minitest | RubyDoc.info

expect

参考:

Method: Minitest::Mock#expect — Documentation for minitest | RubyDoc.info

verify

参考:

Method: Minitest::Mock#verify — Documentation for minitest | RubyDoc.info

stub

参考:

minitest でモジュールメソッドに stub を使う – Qiita

Method: Object#stub — Documentation for minitest | RubyDoc.info

Stubbing method in ActionDispatch::IntegrationTest – Stack Overflow

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 を使う

エンジンのテスト

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-stub_any_instance

インスタンスメソッドをスタブする

参考:

codeodor/minitest-stub_any_instance: Adds a method that creates a method stub on any instance of a class for the duration of a block – GitHub

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

参考:

jfirebaugh/konacha: Test your Rails application’s JavaScript with the mocha test framework and chai assertion library – GitHub

Combustion

参考:

pat/combustion: Simple, elegant testing for Rails Engines – GitHub

テストが失敗した場合にタスクがエラー終了する (仕様)

参考:

No errors when test passes, but “Command failed with status (1)” error when test fails · Issue #137 · seattlerb/minitest – GitHub

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

cannot load such file — test_helper if test case run using ‘ruby’ instead of ‘rake test’ – Stack Overflow

チュートリアル

参考:

「Ruby on Rails on Minitest」を翻訳してみた | give IT a try

Tips

参考:

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

私が Minitest と Rails の Fixtures にハマった7つの理由 | 有頂天 Ruby

Dress Up Your Minitest Output | Chris Said So

Tagged:

コメントを残す

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