RSpec

【RSpec】before(:suite)/before(:all)/before(:each)それぞれの違いについてまとめてみた

RSpec

 

今回は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)実行
RSpec
【RSpec】before(:suite)/after(:suite)とbefore(:all)/after(:all)の実行タイミングについて簡単にまとめてみたRSpecのbefore(:suite)/after(:suite)とbefore(:all)/after(:all)の実行タイミングについて簡単にまとめています。before(:suite)はbefore(:all)よりも前に呼び出され、after(:suite)はafter(:all)よりも後に呼び出されます。...

before(:each)/after(:each)

before(:each)/after(:each)はitの直前に毎回実行されます。

# frozen_string_literal: true

require 'rails_helper'

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

  config.after(:each) do
    puts "after(:each)実行"
  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
  テスト1
before(:each)実行
テスト1実行
after(:each)実行
    テスト1を実行する
  テスト2
before(:each)実行
テスト2実行
after(:each)実行
    テスト2を実行する

実行タイミングのテストPart2
  テスト3
before(:each)実行
テスト3実行
after(:each)実行
    テスト3を実行する
  テスト4
before(:each)実行
テスト4実行
after(:each)実行
    テスト4を実行する
beforeの引数に何も指定しない場合はbefore(:each)が実行されます。

まとめ

  • before(:suite)/after(:suite)はRSpec実行時に1度だけ実行される
  • before(:all)/after(:all)はcontext/describeブロック実行時に呼び出される
  • before(:each)/after(:each)はitの直前に毎回実行される
  • beforeの引数に何も指定しない場合はbefore(:each)が実行される

参考

 

 

今回はRSpecのbefore(:suite)/after(:suite)before(:all)/after(:all)before(:each)/after(:each)それぞれの違いについてまとめました。RSpecを書く際の参考になればと思います。