Zach Dennis wrote:
A short experience report regarding this thread:
Early on when stories were introduced to rspec's code base I started
using them, and I tried some different techniques to see what the
sweet spot was for using stories in actual development. To do some of
this I made modifications to rspec (this was before stories were
released officially)
In my experience I found that trying to build up a highly re-usable
set of steps caused a lot more overhead, both in the creation of new
features and in the maintenance of ongoing development or changes to
existing features. In practice has been much easier for me to build
reusability in the form of helper methods which sit behind steps, and
even to allow yourself to have very simple (even one line) step
definitions.
One problem I noticed I ran into was that I spent too much time trying
to organize and group reusable sets of steps. This made it difficult
when one story changed in how it did something, but another one did
not, and it made my stories rely on several step files (ie: steps_for
=> [:site_navigation, :project_navigation, :project_creation, etc.]).
Sometimes I would end up having to reorganize, or split one step into
two, and then go find all places where things would be affected by
this, etc.
I also found that by focusing on this kind of step reusability I was
writing much more granular stories (ie: implicit story style). When
trying out what is now known as the declarative story style I have
found that introducing new features and changing existing features
takes much less time when all of my steps for a story are in as few as
possible step files (typically just one step file). When I notice that
two stories both have a scenario where the implementation of a step is
the same, I pull that out into a helper much like David suggested. Now
if one of those stories changes, you can change its step w/o affecting
any others.
In summary, don't focus on step reusability across stories, instead
pull out helpers while allowing the steps to be defined separately for
their respecive stories. This will make it easier to introduce new
features and maintain/change existing features over the lifetime of
the app.
HTH,
Zach
+1. I have had the exact same experience. Reusing story steps too
aggressively tends to lead to awkward stories that have a higher
maintenance cost for several reasons.
-Ben
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users