Thanks David for great explanation.

Just to be clear to David and others. As some of you might have
noticed I have been asking a lot of questions starting last week. And
that is because I never used rspec before. And now that I am reading
the book and am trying to convert some of my tests from plain ruby
style tests to rspec I am trying to engage in a conversation.

No offense to anyone. Infact I salute David and other team members.
It's just that I am being more vocal and bringing a perspective to the
community. And ,I believe, if I have a question then others might have
similar question and they might not take time to write in the forum.

Either way I am learning a lot and I hope community benefits. The book
is great. And conversations like this one with real example makes for
great supplement.


On May 27, 2:44 am, Matt Wynne <m...@mattwynne.net> wrote:
> On 27 May 2010, at 04:44, David Chelimsky wrote:
>
>
>
>
>
> > On May 26, 2010, at 9:37 PM, Nadal wrote:
>
> >> Here is my spec.
>
> >> describe Exception2db do
> >> context "attributes" do
> >>   subject { Exception2db.create(:exception => $exception_data_xml) }
>
> >>   specify { subject.controller.should == 'exception2db/main' }
> >>   specify { subject.error_message.should == 'RuntimeError: 46' }
> >>   specify { subject.user_agent.should == "Mozilla/5.0 (Macintosh; U;
> >> Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko)
> >> Chrome/5.0.375.38 Safari/533.4" }
> >> end
> >> end
>
> >> Here is specdoc.
>
> >> Exception2db attributes
> >> - should == "exception2db/main"
> >> - should == "RuntimeError: 46"
> >> - should == "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US)
> >> AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.38 Safari/533.4"
>
> >> All the tests are passing. However the specdoc message is not very
> >> clean.
>
> >> How can I improve the message? What am I missing? The idea of wrapping
> >> each of my specify inside "it" to just to have better message is not
> >> very DRY.
>
> > I look at it the other way: accepting unclear messages just to keep things 
> > DRY is missing the point.
>
> > DRY is about reducing duplication of concepts, not letters. At its heart, 
> > DRY is about maintenance. Duplication can come in very sinister forms, like 
> > two methods with different names on two different objects that accomplish 
> > the same task. That's the sort of duplication that kills maintenance 
> > because a new requirement comes in and you don't even realize you have two 
> > places to change in the code base.
>
> > Consider the following two examples:
>
> > it "concats the first and last name" do
> >  first_name = "David"
> >  last_name = "Chelimsky"
> >  person = Person.new(
> >    :first_name => first_name,
> >    :last_name => last_name
> >  )
> >  person.full_name.should == "#{first_name} #{last_name}"
> > end
>
> > it "concats the first and last name" do
> >  person = Person.new(
> >    :first_name => "David",
> >    :last_name => "Chelimsky"
> >  )
> >  person.full_name.should == "David Chelimsky"
> > end
>
> > Which one is DRYer? You could argue the first one is, because the string 
> > literals are not repeated. You could argue that the second one is, because 
> > the variable names are not repeated. You might argue the first one is 
> > because, even though the variable names are repeated, the failure message 
> > you get if you type "frist_name" will be very informative. You might argue 
> > that typing "Chelmisky" in the second one would also give you an 
> > informative message. Also, the first one very likely duplicates the actual 
> > implementation of the full_name method. And on, and on, and on, and on.
>
> > Here's what I don't really think you can argue against: the second one is 
> > easier to read and understand.
>
> > In the example you gave, I have absolutely no idea what those specs are 
> > telling me about the Exception2db object. After some study, I _think_ I 
> > understand, but it took a minute. What I'd like to see in the specdoc 
> > output is something like:
>
> > Exception2db
> >  stores the controller
> >  stores the runtime error
> >  stores the user agent
>
> > Now I know what this thing DOES. Sure, the spec is going to have more lines 
> > in it, but the concepts expressed in the specdoc are _different_ from the 
> > concepts in the expectations. In my book, that's not a DRY violation at all.
>
> > HTH,
> > David
>
> > ps - there is some irony in the fact that I keep repeating myself on this 
> > exact topic on this list. I think I need to write this up in a blog post 
> > and point people to that in the future. Now THAT would be DRY.
>
> Great explanation David.
>
> There's a slightly different point about this, which is that in the BDD world 
> we aspire to build things from the "outside in".
>
> These splendid methods that automatically generate specdoc from code are 
> great in simple cases, but very often it's advisable to start by writing a 
> plain-english description of what you're setting out to do before you write 
> any code. Jumping straight in to writing the code (the solution) without 
> clearly having stated the goal can mean you miss a chance to get insights 
> into your design.
>
> cheers,
> Matthttp://blog.mattwynne.net
> _______________________________________________
> rspec-users mailing list
> rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to