rspecのbeforeフックのところに説明がないのでメモ。
環境
$ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0
動き
未指定の場合は each
と同じ挙動をする
検証
検証に使うspecファイル
spec/models/user_spec.rb
として以下を用意する
# == Schema Information # # Table name: users # # id :bigint(8) not null, primary key # name :string(255) # created_at :datetime not null # updated_at :datetime not null # require 'rails_helper' RSpec.describe User, type: :model do describe "#create" do let(:user) {User.create(name: nil)} # ココらへんを書き換える before do pp "throw before" end it "nameはnil" do expect(user.name).to eq(nil) end it "idは何か入っている" do expect(user.id).not_to eq(nil) end end end
挙動の変化
何も指定指定しないパターン
before do pp "throw before" end
itの度に実行
$ bundle exec rspec spec/models/user_spec.rb "throw before" ."throw before" . Finished in 0.04923 seconds (files took 3.67 seconds to load) 2 examples, 0 failures
eachを指定するパターン
before(:each) do pp "throw before" end
itの度に実行される
$ bundle exec rspec spec/models/user_spec.rb "throw before" ."throw before" . Finished in 0.04535 seconds (files took 3.56 seconds to load) 2 examples, 0 failures
allを指定するパターン
before(:all) do pp "throw before" end
1回だけ実行される
$ bundle exec rspec spec/models/user_spec.rb "throw before" .. Finished in 0.05138 seconds (files took 3.13 seconds to load) 2 examples, 0 failures