[rspec-users] given_it

Dan North dan at tastapod.com
Fri Sep 21 16:32:50 EDT 2007


I have to agree with David. (It's in the contract ;)

Scenarios are reusable as steps in order to chain multiple scenarios 
together (to describe the various coarse-grained stages of a workflow, 
state machine or wizard, for example).

At an example level it is just confusing. I've noticed that if I find 
myself wanting to do that, it's an indication that the objects are too 
tightly coupled or dependent on one another. There is usually a cleaner 
abstraction in there waiting to be discovered that will mean you don't 
need to chain examples in this way.

fwiw GivenScenario was introduced into JBehave to work around the 
constraint that scenarios were only allowed to be of the form 
Given/When/Then in the early days. Then we relaxed scenarios to allow 
mixing up steps in any order (given.. when.. then.. when.. then..) which 
made them read much more naturally. GivenScenarios aren't used much now 
other than in the specific situations I described above (state machines, 
etc).

Cheers,
Dan

David Chelimsky wrote:
> On 9/21/07, Yurii Rashkovskii <yrashk at gmail.com> wrote:
>   
>> Sure! But they are not the same stuff. What I was looking for is
>>
>> it "should do #1" do
>>   ...
>> end
>> it "should do X after #1" do
>>   given_it "should do #1"
>>   should do_x
>> end
>> it "should do Y after #1" do
>>   given_it "should do #1"
>>   should do_y
>> end
>> it "should do Z after #1 Y" do
>>   given_it "should do Y after #1"
>>   should do_z
>> end
>>     
>
> Sorry mate - that just seems like endless confusion - the examples
> should never rely on each other that way - different animal from
> scenarios that involve steps.
>
>   
>> Or am I missing somethiing?
>>
>>
>> On Sep 21, 2007, at 10:49 PM, David Chelimsky wrote:
>>
>>     
>>> Have you seen shared behaviours?
>>>
>>> On 9/21/07, Yurii Rashkovskii <yrashk at gmail.com> wrote:
>>>       
>>>> Hello,
>>>>
>>>> Just decided to check whether I am doing something that makes sense
>>>> or not. I was thinking about how cool would it be to re-use examples
>>>> (just like we reuse story scenarios with GivenScenario). I was not
>>>> sure if this possibility already exists in rspec (and, honestly, was
>>>> lazy to check), so I have created this helper:
>>>>
>>>> def given_it(name)
>>>>    example_definition = behaviour.example_definitions.find{|i|
>>>> i.description == name }
>>>>    instance_eval(&example_definition.example_block)
>>>> end
>>>>
>>>> so it is possible to write things like
>>>>
>>>> it "should do something after another action" do
>>>>    given_it "should successfully do another action"
>>>>    do_something.should be_fine
>>>> end
>>>>
>>>> Is there anything already in rspec that allows me to do the same
>>>> stuff? Or was it a bad idea at all?
>>>>
>>>> Yurii.
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> rspec-users at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>>
>>>>         
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>       
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>>     
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070921/120f9874/attachment.html 


More information about the rspec-users mailing list