[rspec-users] Reuse of Cucumber Features

Matt Wynne matt at mattwynne.net
Thu Apr 9 17:25:36 EDT 2009

On 9 Apr 2009, at 20:36, Zach Dennis wrote:

> On Thu, Apr 9, 2009 at 3:30 PM, Zach Dennis <zach.dennis at gmail.com>  
> wrote:
>> On Thu, Apr 9, 2009 at 2:56 PM, Matt Wynne <matt at mattwynne.net>  
>> wrote:
>>> On 9 Apr 2009, at 17:47, Zach Dennis wrote:
>>>> On Thu, Apr 9, 2009 at 9:29 AM, Williams, Wesley
>>>> <Wesley.Williams at sabre.com> wrote:
>>>>> Matt,
>>>>> Hmm, I think this is one way to do it.  I will need to get my  
>>>>> customer
>>>>> to think differently about defining the requirements.  They  
>>>>> really like
>>>>> the tables.
>>>> Some times table just work best. I love writing scenarios with  
>>>> natural
>>>> language, but I've hit many cases where the inputs and outputs are
>>>> best displayed as a table, and it's easier for the customer to  
>>>> gr0k,
>>>> then to read a short novel.
>>>> This kind of re-use that you seem to need sounds like a potential
>>>> feature for Cucumber. A way to utilize an external file to house a
>>>> table of data. e.g.:
>>>> Background
>>>>  Given I have the following set of flights:
>>>>     | foo | bar | baz |
>>>>     ...
>>>> Would become
>>>> Background
>>>>   Given I have the following set of flights:
>>>>   FromFile: flights/scheduleA
>>>> And then you'd have the flights/scheduleA house:
>>>>     | foo | bar | baz |
>>>>     ...
>>>> Cucumber could dump in the table data it found from the file, and
>>>> print it out when running the scenarios, and it allows some sets of
>>>> sample data be re-used easily, in an understandable manner.
>>>> WDYT?
>>> This is a good idea - people do this with Fit (as opposed to  
>>> Fitnesse) and
>>> go straight to a spreadsheet for the examples.
>>> I don't see why it needs a new Cucumber feature though - you could  
>>> easily
>>> (and more flexibly) write a custom step yourself to load in the  
>>> data from an
>>> external file, right?
>> That's true, but why does everyone need to write their file loading
>> step/code? It seems like something where flexibility really doesn't
>> benefit anyone, unless you are doing something unique and special,
>> which I think is different than simply being able to store example
>> tables in an external file.
> One more though, how would you process your example table from a file
> within a step? Would you do a giant "eval" after reading the contents?
> Or would you reach into the guts of Cucumber to programmatically build
> the right thing? Is there another way? I've never done it, so just
> asking how you would approach this by writing your own step,

Not sure - I've not needed to do it yet, which is why I would balk at  
generalising it into the Cucumber framework - seems a bit premature :)

I guess I would replace this:

     Given I have the following set of flights:
          | foo | bar | baz |

With this:

     Given I have the set of flights specified in "test_data/foo.xls"

Then in that step matcher I'd open the spreadsheet, loop through the  
rows and just do the same as I would with the hashes I'd normally get  
from Cucumber I suppose.

Obviously you couldn't do this for scenario outline tables without  
extending Cucumber, but that's another issue entirely.

Matt Wynne

More information about the rspec-users mailing list