2010-08-08 5 views
2

Si un fichier spec contient ceci avant les groupes d'exemples it(), que signifie-t-il?Rspec avant la méthode

context "when almost full (with one element less than capacity)" do 
    before(:each) do 
    @stack = Stack.new 
    (1..9).each { |n| @stack.push n } 
    end 
end 

context "when full" do 
    before(:each) do 
    @stack = Stack.new 
    (1..10).each { |n| @stack.push n } 
    end 
end 

Lequel sera celui qui sera exécuté avant?

Je ne comprends pas.

Répondre

8

before(:each) sera exécuté avant d'exécuter les spécifications suivantes. Par exemple, dans votre spécification pour une pile complète, toutes les spécifications auront une pile complète configurée avant d'être exécutées. Vous n'avez pas de méthodes It, donc cela ne se produit pas vraiment actuellement.

Il peut être intéressant de noter qu'il y a before(:all) qui sera exécuté une fois, avant toutes les spécifications pour ce contexte. Alors que before(:each) est exécuté avant chaque spécification.

+0

mais j'ai deux différents avant (: chacun) dans l'exemple. Je me demande lequel sera exécuté si j'ai eu des blocs it(). –

+4

La méthode 'before (: each)' est exécutée pour tous les exemples dans le contexte où elle est définie. La façon dont votre spec est écrite les deux méthodes 'before (: each)' sont dans des contextes séparés, donc ils vont tous les deux s'exécuter, mais pas pour les mêmes exemples. – zetetic

+0

Zetetic m'a battu à ma réponse, mais il est sur place. Comme les contextes ne sont pas imbriqués, chaque configuration sera exécutée individuellement, et ne pas interférer les uns avec les autres. – Finglas

Questions connexes