概要
matcherの戻り値に応じて後処理を行う
前提
rspec_piccoloを利用します
構成
$ tree Gemfile lib ┣ hoge.rb ┗ spec | hoge_spec.rb ┗ spec_helper.rb
実装
# encoding: utf-8 module Hoge class Core def hoge(message) message end end end
テスト
# encoding: utf-8 require "spec_helper" require "hoge" describe Hoge::Core do context :hoge do success = Proc.new do puts "success!!!!!!!!!!!!" end failure = Proc.new do puts "failure!!!!!!!!!!!!" end cases = [ { case_no: 1, case_title: "valid case", input: "hoge", expected: "hoge", success_hook: success, failure_hook: failure }, { case_no: 2, case_title: "invalid case", input: "invalid", expected: "hoge", success_hook: success, failure_hook: failure }, ] cases.each do |c| it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do begin case_before c # -- given -- hoge_core = Hoge::Core.new # -- when -- actual = hoge_core.hoge c[:input] # -- then -- ret = expect(actual).to eq(c[:expected]) ensure case_after c later = ret ? c[:success_hook] : c[:failure_hook] later.call end end def case_before(c) # implement each case before end def case_after(c) # implement each case after end end end end
実行結果
無事結果に応じてProcを呼び出し出来ました
$ rspec Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} failure!!!!!!!!!!!! Fsuccess!!!!!!!!!!!! . Failures: 1) Hoge::Core hoge |case_no=2|case_title=invalid case Failure/Error: ret = expect(actual).to eq(c[:expected]) expected: "hoge" got: "invalid" (compared using ==) # ./spec/hoge_spec.rb:46:in `block (4 levels) in <top (required)>' Finished in 0.002 seconds 2 examples, 1 failure Failed examples: rspec ./spec/hoge_spec.rb:35 # Hoge::Core hoge |case_no=2|case_title=invalid case Randomized with seed 32099