web-dev-qa-db-fra.com

Dans RSpec, quelle est la différence entre before (: suite) et before (: all)?

La documentation de hook avant et après sur Relish indique uniquement que before(:suite) est appelé avant before(:all).

Quand devrais-je utiliser l'un sur l'autre?

35
Mark Rushakoff

Lorsqu'un before(:all) est défini dans le bloc RSpec.configure, il est appelé avant chaque groupe d'exemple de niveau supérieur, alors qu'un bloc de code before(:suite) n'est appelé qu'une fois.

Voici un exemple:

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

Sortie:

Before :suite
Before :all
spec1
After :all
Before :all
spec2
After :all
After :suite
60
Leo

Vous pouvez également utiliser avant (: suite) pour exécuter un bloc de code avant tout Des exemples de groupes sont exécutés. Cela devrait être déclaré dans RSpec.configure

http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/Hooks

0
denis.peplin