RSpec

【RSpec】before(:suite)/after(:suite)とbefore(:all)/after(:all)の実行タイミングについて簡単にまとめてみた

RSpec

 

今回はRSpecのbefore(:suite)/after(:suite)before(:all)/after(:all)の実行タイミングについて簡単にまとめてみました。個人的にも曖昧な部分だったので備忘録としてもまとめています。

RSpec
【RSpec】before(:suite)/before(:all)/before(:each)それぞれの違いについてまとめてみたRSpecのbefore(:suite)/after(:suite)とbefore(:all)/after(:all)、before(:each)/after(:each)それぞれの違いについてまとめています。それぞれの実行タイミングが異なり、忘れがちな部分でもあるので備忘録としてまとめています。...

before(:suite)/after(:suite)

before(:suite)/after(:suite)はRSpec実行時に1度だけ呼び出されます。

# frozen_string_literal: true

require 'rails_helper'

RSpec.configure do |config|
  config.before(:suite) do
    puts "before(:suite)実行"
  end

  config.after(:suite) do
    puts "after(:suite)実行"
  end
end

RSpec.describe '実行タイミングのテストPart1' do
  describe 'テスト1' do
    it "テスト1を実行する" do
      puts 'テスト1実行'
    end
  end

  context 'テスト2' do
    it "テスト2を実行する" do
      puts 'テスト2実行'
    end
  end
end

RSpec.describe '実行タイミングのテストPart2' do
  describe 'テスト3' do
    it "テスト3を実行する" do
      puts 'テスト3実行'
    end
  end

  context 'テスト4' do
    it "テスト4を実行する" do
      puts 'テスト4実行'
    end
  end
end
% rspec

before(:suite)実行

実行タイミングのテストPart1
  テスト1
テスト1実行
    テスト1を実行する
  テスト2
テスト2実行
    テスト2を実行する

実行タイミングのテストPart2
  テスト3
テスト3実行
    テスト3を実行する
  テスト4
テスト4実行
    テスト4を実行する

after(:suite)実行

before(:all)/after(:all)

before(:all)/after(:all)はcontext/describeブロック実行時に呼び出されます。

# frozen_string_literal: true

require 'rails_helper'

RSpec.configure do |config|
  config.before(:all) do
    puts "before(:all)実行"
  end

  config.after(:all) do
    puts "after(:all)実行"
  end
end

RSpec.describe '実行タイミングのテストPart1' do
  describe 'テスト1' do
    it "テスト1を実行する" do
      puts 'テスト1実行'
    end
  end

  context 'テスト2' do
    it "テスト2を実行する" do
      puts 'テスト2実行'
    end
  end
end

RSpec.describe '実行タイミングのテストPart2' do
  describe 'テスト3' do
    it "テスト3を実行する" do
      puts 'テスト3実行'
    end
  end

  context 'テスト4' do
    it "テスト4を実行する" do
      puts 'テスト4実行'
    end
  end
end
% rspec

実行タイミングのテストPart1
before(:all)実行
  テスト1
テスト1実行
    テスト1を実行する
  テスト2
テスト2実行
    テスト2を実行する
after(:all)実行

実行タイミングのテストPart2
before(:all)実行
  テスト3
テスト3実行
    テストを実行する
  テスト4
テスト4実行
    テスト4を実行する
after(:all)実行

実行タイミング

実行タイミングとしては、before(:suite)before(:all)よりも前に呼び出されます。またafter(:suite)after(:all)よりも後に呼び出されます。

RSpec.configure do |config|
  config.before(:all) { puts 'Before :all' }
  config.after(:all) { puts 'After :all' }
  config.before(:suite) { puts 'Before :suite' }
  config.after(:suite) { puts 'After :suite' }
end

describe 'spec1' do
  example 'spec1' do
    puts 'spec1'
  end
end

describe 'spec2' do
  example 'spec2' do
    puts 'spec2'
  end
end
% rspec

Before :suite
Before :all
spec1
After :all
Before :all
spec2
After :all
After :suite

 

before(:suite)/after(:suite)はRSpec実行時に1度だけ呼び出されるため最初と最後に1度だけ、before(:all)/after(:all)はcontext/describeブロック実行時に呼び出されるため各exampleの前後に呼び出されていますね。

まとめ

  • before(:suite)/after(:suite)はRSpec実行時に1度だけ呼び出される
  • before(:all)/after(:all)はcontext/describeブロック実行時に呼び出される
  • before(:suite)before(:all)よりも前に呼び出される
  • after(:suite)after(:all)よりも後に呼び出される

参考

 

 

今回はRSpecのbefore(:suite)とbefore(:all)の実行タイミングについて簡単にまとめました。呼び出されるタイミングに若干の違いがあるため、ここら辺を意識して使いこなせるようにしたいですね。