Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

RSpec | rspec hook | before/after

概要

rspec hook | before/after

詳細

rspecのhookについて。
before/afterフックは各exampleの処理前後に処理を追加することができます。
引数に「:each」「:all」のどちらかを指定することで1回だけ実行するか、
各exampleごとに実行するか設定できます。

また、RSpec.configureのbefore/afterフックを設定することで
テストケース全体に対する前処理・後処理を設定できます。

下記に設定サンプルを例示します。

構成

$ tree
┣ lib
| ┗ hoge.rb
┗ spec
    ┣ hoge_spec.rb
    ┗ spec_helper.rb

hoge.rb

# encoding: utf-8

class Hoge
  5.times do |i|
    define_method "hoge#{i}".to_sym do
      puts "        hoge#{i}"
    end
  end
end

hoge_spec.rb

require 'spec_helper'
require 'hoge'

describe Hoge do
  before(:all) do
    puts "  before all"
  end
  before(:each) do
    puts "      before each"
  end
  after(:all) do
    puts "  after all"
  end
  after(:each) do
    puts "      after each"
  end

  5.times do |i|
    it "hoge#{i}" do
      Hoge.new.send "hoge#{i}"
    end
  end
end

spec_helper.rb

RSpec.configure do |config|
  config.treat_symbols_as_metadata_keys_with_true_values = true
  config.run_all_when_everything_filtered = true
  config.filter_run :focus
  config.before(:all) do
    puts "config before all"
  end
  config.before(:each) do
    puts "    config before each"
  end

  config.after(:all) do
    puts "config after all"
  end
  config.after(:each) do
    puts "    config after each"
  end
end

テストを実行してみる

$ rspec
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
config before all
  before all
    config before each
      before each
        hoge0
      after each
    config after each
.    config before each
      before each
        hoge1
      after each
    config after each
.    config before each
      before each
        hoge2
      after each
    config after each
.    config before each
      before each
        hoge3
      after each
    config after each
.    config before each
      before each
        hoge4
      after each
    config after each
.  after all
config after all


Finished in 0.00103 seconds
5 examples, 0 failures