Minitestの統合
rspec-expectationsは、RSpecの他の部分なしで使用できる独立したgemです。もしテストランナーとしてminitestを使用したいが、RSpecのアプ ローチで期待値を表現したい場合、両方を組み合わせることができます。
rspec-expectationsをminitestと統合するには、rspec/expectations/minitest_integration
をrequireします。
minitestでrspec/expectationsを使用する
以下の内容で「rspec_expectations_test.rb」という名前のファイルがあるとします。
require 'minitest/autorun'
require 'rspec/expectations/minitest_integration'
class RSpecExpectationsTest < Minitest::Test
RSpec::Matchers.define :be_an_integer do
match { |actual| Integer === actual }
end
def be_an_int
# This is actually an internal rspec-expectations API, but is used
# here to demonstrate that deprecation warnings from within
# rspec-expectations work correctly without depending on rspec-core
RSpec.deprecate(:be_an_int, :replacement => :be_an_integer)
be_an_integer
end
def test_passing_expectation
expect(1 + 3).to eq 4
end
def test_failing_expectation
expect([1, 2]).to be_empty
end
def test_custom_matcher_with_deprecation_warning
expect(1).to be_an_int
end
def test_using_aggregate_failures
aggregate_failures do
expect(1).to be_even
expect(2).to be_odd
end
end
end
ruby rspec_expectations_test.rb
を実行すると、
出力 には「4 runs, 5 assertions, 2 failures, 0 errors」という文字列が含まれているはずです。
また、出力には「expected [1, 2].empty?
to be truthy, got false」という文字列が含まれているはずです。
さらに、出力には「be_an_int is deprecated」という文字列が含まれているはずです。
そして、出力には「Got 2 failures from failure aggregation block」という文字列が含まれているはずです。
minitest/specでrspec/expectationsを使用する
以下の内容で「rspec_expectations_spec.rb」という名前のファイルがあるとします。
require 'minitest/autorun'
require 'minitest/spec'
require 'rspec/expectations/minitest_integration'
describe "Using RSpec::Expectations with Minitest::Spec" do
RSpec::Matchers.define :be_an_integer do
match { |actual| Integer === actual }
end
it 'passes an expectation' do
expect(1 + 3).to eq 4
end
it 'fails an expectation' do
expect([1, 2]).to be_empty
end
it 'passes a block expectation' do
expect { 1 / 0 }.to raise_error(ZeroDivisionError)
end
it 'fails a block expectation' do
expect { 1 / 1 }.to raise_error(ZeroDivisionError)
end
it 'passes a negative expectation (using `not_to`)' do
expect(1).not_to eq 2
end
it 'fails a negative expectation (using `to_not`)' do
expect(1).to_not eq 1
end
it 'fails multiple expectations' do
aggregate_failures do
expect(1).to be_even
expect(2).to be_odd
end
end
it 'passes a minitest expectation' do
expect(1 + 3).must_equal 4
end
it 'fails a minitest expectation' do
expect([1, 2]).must_be :empty?
end
end
ruby rspec_expectations_spec.rb
を実行すると、
出力には「9 runs, 10 assertions, 5 failures, 0 errors」という文字列が含まれているはずです。
また、出力には「expected [1, 2].empty?
to be truthy, got false」という文字列が含まれているはずです。
さらに、出力には「expected ZeroDivisionError but nothing was raised」という文字列が含まれているはずです。
そして、出力には「Got 2 failures from failure aggregation block」という文字列が含まれているはずです。
最後に、出力には「Expected [1, 2] to be empty?」という文字列が含まれているはずです。