Minitest

参考:

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

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

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 調べてみた – SlideShare

導入

参考:

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 と minitest の比較 – Qiita

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.rbminitest/reportersrequire し、use! で使用するレポーターを指定する。

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

テストの前に一度だけ初期化する/テストの終了処理をする

  • 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

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

参考:

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_helpersinclude する。

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

参考:

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

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

テストが二度実行される

参考:

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

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

Dress Up Your Minitest Output | Chris Said So

記事をシェアする:
タグ:

コメントを残す

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

Protected by reCAPTCHA