[rspec-users] Sample App - TDD with Cucumber and RSpec

Matt Wynne matt at mattwynne.net
Mon Dec 1 18:17:21 EST 2008


On 1 Dec 2008, at 19:00, Fernando García Samblas wrote:

>
> Paul,
>
> thanks for sharing your examples. I was just thinking about posting
> something that can be introduced nicely with your sample app.
>
> Now in cuc_demo we've got a step definition for /^there are no  
> posties$/
> in postie_steps.rb. This way, if we'd need to add a "Given there are  
> no
> users" step we should create a user_steps.rb with a similar  
> definition.
>
> IMHO it would be nice to have instead a "context_definitions.rb" with
> common "givens" (similar to navigation_definitions.rb) and there a  
> more
> general definition, like for instance:
>
> Given /^there are no (.*)$/ do |thing|  
> thing_to_model(thing).destroy_all
> end
>
> In our World we should have a thing_to_class method with the mappings
> between the names used in features and the model class that  
> implement them.
>
> I think this mapping is also useful if tomorrow you and/or your client
> decides to call it "pasties" instead of "posties" (and is more than
> useful if you're writing your features in other language than English,
> cause you cannot obtain the class name through transformations of the
> original "thing").

We have a convention here at Songkick (after a great deal of debate)  
that it's OK to refer to key domain concepts like Concerts, Artists,  
Venues etc by their Ruby class name from within the scenario. Thus our  
thing_to_model function is always a matter of just calling  
thing.constantize.

I greatly prefer this to having any kind of custom mapping - it  
promotes the 'ubiquitous language' that Eric Evans talks about in the  
original DDD book.

Maybe it's different when you're working in another language though -  
I guess it's preferable to use English names for classes etc, is it?

Matt Wynne
http://blog.mattwynne.net
http://www.songkick.com



More information about the rspec-users mailing list