LoginSignup
24

More than 5 years have passed since last update.

「RSpecでも assert xxx って書いてテストしたい」=> すぐできます!

Last updated at Posted at 2015-05-29

はじめに

「RSpecは expect(X).to みたいな書き方しかできないから嫌い!」
「RSpecでも assert xxxassert_equal X, Y を使いたい!」

と思ったことはありませんか?

この記事はそんなふうに考えている方へのHowto記事です。

rspec-railsでMinitestのアサーションを使う

実はrspec-railsを使うと、デフォルトでMinitestのアサーションが使えるようになっています。

もし手元にrspec-railsを使っているプロジェクトがあれば、試しに以下のようなコードを実行してみてください。
きっとパスするはずです。

require 'rails_helper'

describe 'Sample' do
  example do
    expect(1 + 1).to eq 2

    # Minitestのアサーションを使う
    assert_equal 2, (1 + 1)
    assert ''.blank?
    refute ''.present?
  end
end

参考:テスト失敗時の出力例

F

Failures:

  1) Sample should eq 2
     Failure/Error: assert_equal 2, (1 + 10)
     Minitest::Assertion:
       Expected: 2
         Actual: 11
     # ./spec/models/sample_spec.rb:8:in `block (2 levels) in <top (required)>'

Finished in 0.00235 seconds (files took 2.35 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/models/sample_spec.rb:4 # Sample should eq 2

動作確認した環境

  • Ruby 2.2.2
  • Rails 4.2.1
  • rspec-rails 3.2.1

素のRSpecでMinitestのアサーションを使う

rspec-railsを使わない、素のRSpecでもMinitestのアサーションを使う方法はあります。
手順は以下の通りです。

1. GemfileにMinitestを追加

 source "https://rubygems.org"

 gem "rspec"
+gem "minitest"
# Minitestをインストール
bundle install

2. spec_helper.rbにMinitestを使う設定を追加

 RSpec.configure do |config|
+  config.expect_with :rspec, :minitest
   config.expect_with :rspec do |expectations|
     expectations.include_chain_clauses_in_custom_matcher_descriptions = true
   end
   # ...

3. Minitestのアサーションを使ってテストを書く

require 'spec_helper'

describe 'Sample' do
  example do
    expect(1 + 1).to eq 2

    # Minitestのアサーションを使う
    assert_equal 2, (1 + 1)
    assert ''.empty?
    refute 'X'.empty?
  end
end
# 実行
bundle exec rspec

備考

素のRSpec環境をセットアップする方法は @yusabana さんの以下の記事を参考にしてください。

RailsじゃないRspec3環境を構築する方法 - Qiita

動作確認した環境

  • Ruby 2.2.2
  • rspec 3.2.0
  • minitest 5.7.0

まとめ

「あれ?RSpecってこんなときどんなマッチャを使うんだったっけなー?あー、調べるの面倒くさい!」って思ったときは、サクッとアサーションを書くのもアリかもしれませんね。

以上、ご参考までに。

あわせて読みたい

Minitestのアサーションもいいけど、あらためてRSpecのマッチャを勉強したいなと思った方はこちらの記事をどうぞ!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24