今回は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】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(: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を書く際の参考になればと思います。