On Tue, Sep 9, 2008 at 8:42 AM, aslak hellesoy <[EMAIL PROTECTED]>wrote:

> On Tue, Sep 9, 2008 at 2:21 PM, Dan North <[EMAIL PROTECTED]> wrote:
> > Hi Jim.
> >
> > I guess I'm not a purist then - that looks fine to me, and it's probably
> > something I would consider doing too.
>


> The debate seems to be whether step definitions should be stateful or not.
> In practice this is achieved by setting one or more @variables in a
> step and reusing them in a different step - all within a scenario.
>
> Both are fine, but beware that as your codebase grows and you have
> hundred or so step definitions, things can become *really* hard to
> maintain.
> It won't bite you when you start on a new codebase, but in my
> experience stateful steps will bite you later.
>
> Having experienced this pain in one project, I decided to try out
> stateless steps exclusively on the next project. I've found stateless
> steps to be a tad more verbose than stateful ones, both in the text
> and in the implementation (because you have to pass "identifiers"
> around). Still, the improved maintainability of my features and
> scenarios using this approach outweighs this slight increase in
> verbosity.
>
> Here is an example of a stateless scenario: (As a convention I'm
> "quoting" variables)
>
>
> http://github.com/aslakhellesoy/ba/tree/master/features/submit_proposal.feature
>
> You can see the extra verbosity I'm talking about in the repetition of
> "Aslak", "Beerfest" etc.
>
> I'm still pragmatic about this of course, but now you know some of my
> experience.
>

I've done something similar, but I might have handled the steps
implementation a bit differently in that I'm not sure my approach would be
called stateless.

For example say I had (in a very abstract form)

    Given 'Rick' has admin privileges
    Then 'Rick' can do admin function X

In the  step for the given, I'd get or create an admin user named rick, and
set an instance variable say @admin
Then in the step for the then, I'd have an expectation that the name of
@admin matched the name given in the step.
This was a way of catching cases where the story mixed up actors.

Although the short example doesn't really emphasize the problem I was trying
to solve, I'm not sure in retrospect whether or not this was a valuable
thing to do.


-- 
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to