I'm not sure this answers your questions, but you prompted me to share my experience.

Personally i consider BDD just one tool in my toolbox. And I consider rspec to be as much a testing tool as a (BD)Development one. So I often find myself just taking the path of least resistance. And iterating.

In some cases it really 'feels right' to write the examples first and then implement the code, repeat... I love doing that, the 'BDD way' is fun.

But half the time, I find myself working 'the old fashioned way' - I write down (often with pen and paper, omg!) a list of things my code needs to do, I implement it, test it manually in the browser or console. After a point (not too much later though) I then go back and write specs that verify my code and firm up my intent. I think this is because Ruby and Rails can be so expressive in themselves (like the plugins you mentioned). I've jokingly referred to this as DDB (development driven behavior).

Importantly, when I code first, then spec, the spec phase is not an 'afterthought'. Rather, the code can be thought of a first pass or prototype, and the specs get me the firm up (or reevaluate) the behavior and/or refactor my code. Bottom line -- the process is iterative.

In the end, both approaches leave me with quality code, expressive specs, edge test cases, and regression tests.

Obviously I'm not speaking as a BDD priest, rather as a soldier in the trenches.

linoj


On Apr 24, 2008, at 12:30 PM, Matthew Lins wrote:

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

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://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