[rspec-users] BDD/Rails/Shoulda

Matthew Lins mattlins at gmail.com
Thu Apr 24 12:30:11 EDT 2008


This is a little off topic, but I use rSpec and I¹m starting to question the
quality of my specs.  In my research and attempt to learn how to write
better specs, I¹ve came across a few things that I¹d like to discuss.

I¹m having more and more difficulty understanding BDD.  The more I read and
the more I watch, the more questions I come up with.   Let me just ask a
couple of general questions to start this off.

Is Œshoulda¹ actually following the principals of BDD?  But, I guess that¹s
not really a good question.  Is Œshoulda¹ encouraging it¹s users to follow
the principals of BDD?  I see all of the macros like:

should_belong_to

should_require_attributes

To me, that is not BDD.  Basically that¹s just testing whether or not your
model contains a certain code fragment.  But, that brings me to my next
question.

Is BDD even possible with Rails?  (I think it is, but I ask myself that more
and more lately)

I just picked a random model in the application I¹m currently working on.
The ŒPicture¹ model.  I use the attachment_fu plugin, which helps this model
handle pictures (it creates thumbnails, validates sizes, etc.)  I wiped out
all the code I had and all the specs I had.  I started from scratch:

----------------------------------

class Picture < ActiveRecord::Base

end

----------------------------------

The first piece of code I would write if I wasn¹t using BDD, would be:


----------------------------------

class Picture < ActiveRecord::Base

  validates_as_attachment

end

----------------------------------

Which basically handles all of my validation.  So, from a BDD perspective,
how do I spec that?  I know, I know, I should be writing the specs first.
But, what do I do about these helpers that come with plugins.  Do I write a
spec:

----------------------------------

describe Picture, Œwith a blank filename¹ do

  before(:each) do
    @picture = Picture.new valid_picture_attributes.except(:filename) # This
uses some rSpec helpers
  end

  it do
    @picture.should_not be_valid
  end

end

-----------------------------------

So, the most simple way to solve that would be (this is part of what
Œvalidates_as_attachment¹ does):

----------------------------------

class Picture < ActiveRecord::Base

  validates_presence_of :filename

end

----------------------------------

But, now what, I¹m going to reverse engineer this plugin¹s helper?  I¹ll
just spec it all out and eventually refactor and put the
Œvalidates_as_attachment¹ back?  Or, maybe since this is a plugins helper I
don¹t even need to test any of this.  It¹s the author of the plugin¹s
responsibility.  This is were my brain enters an infinite loop (one example
anyway, hehe).  I just can¹t seem to nail down the workflow when specing
rails apps.  I also have a hard time determining what to spec.

I know I asked a lot of questions, but basically I¹m just trying to find out
if people are actually following the BDD principals strictly when writing
Rails apps.  If you are can you give me some insight in the above example?

Thanks,

Matt Lins
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20080424/b545dff3/attachment.html 


More information about the rspec-users mailing list