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

【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)の実行タイミングについて簡単にまとめました。呼び出されるタイミングに若干の違いがあるため、ここら辺を意識して使いこなせるようにしたいですね。