rspec-given: e se fosse la soluzione?

Tornando a bomba sui miei interrogativi passati, potrei aver trovato una soluzione in grado di permettere una maggiore descrittività ai test – in stile Gherkin – ma al tempo stesso “sicura” (ovvero che non utilizzi librerie TDD ancora in stato alpha).

La soluzione si chiama rspec-given è non è altro che una leggera DSL sopra ad RSpec, che permette di utilizzare dei blocchi GivenWhen e Then.

Esempio d’ordinanza:

1 describe Stack do 
2 
3 def stack_with(initial_contents) 
4 stack = Stack.new 
5 initial_contents.each { |item| stack.push(item) }
6 stack 
7 end 
8 
9 Given(:stack) { stack_with(initial_contents) } 
10 
11 context "when empty" do 
12 Given(:initial_contents) { [] } 
13 Then { stack.depth.should == 0 } 
14 
15 context "when pushing" do 
16 When { stack.push(:an_item) } 
17 
18 Then { stack.depth.should == 1 } 
19 Then { stack.top.should == :an_item } 
20 end 
21 end 
22 
23 end

Direi che la cosa migliore è provarlo per trovarne eventuali lati negativi o brutture. Vi faccio sapere.