On Fri, Dec 5, 2008 at 8:08 PM, David Chelimsky <[EMAIL PROTECTED]> wrote: > On Fri, Dec 5, 2008 at 3:36 PM, Stephen Veit <[EMAIL PROTECTED]> wrote: >> I am trying to develop code from the feature on down. >> >> So I created a brand new rails app. It has no models yet. I wrote a feature: >> >> Feature: Add tasks >> In order to track website improvements >> a user >> wants to add tasks >> >> Scenario: User adds task >> Given task "Display Group Rules" does not exist >> When I visit "/tasks/new" >> And I fill in "Name" with "Display Group Rules" >> And I fill in "Description" with "Displays links to edit each group >> rule" >> And I fill in "CAS Link" with "GroupRulesManager/" >> And I press "Submit" >> Then I should end up on the Tasks page >> And I should see "Task successfully added" >> And the task "Display Group Rules" should exist >> >> I then run: >> >> rake db:migrate (this creates my development SQLite3 database) >> rake db:test:prepare (this creates my development SQLite3 database) >> rake features (outputs the following:) >> >> Feature: Add tasks # features/manage_task.feature >> In order to track website improvements >> a user >> wants to add tasks >> Scenario: User adds task >> Given task "Display Group Rules" does not exist >> When I visit "/tasks/new" >> And I fill in "Name" with "Display Group Rules" >> And I fill in "Description" with "Displays links to edit each group >> rule" >> And I fill in "CAS Link" with "GroupRulesManager/" >> And I press "Submit" >> Then I should end up on the Tasks page >> And I should see "Task successfully added" >> And the task "Display Group Rules" should exist >> >> >> 5 steps skipped >> 4 steps pending >> >> You can use these snippets to implement pending steps: >> >> Given /^task "Display Group Rules" does not exist$/ do >> end >> >> When /^I visit "\/tasks\/new"$/ do >> end >> >> Then /^I should end up on the Tasks page$/ do >> end >> >> Then /^the task "Display Group Rules" should exist$/ do >> end >> >> >> My question is where to go from here. Do I implement the four pending steps, >> e.g: >> >> Given /^task "(.+)" does not exist$/ do |name| >> task = Task.find_by_name(name) >> task.destroy if task >> end >> >> Or do I run: >> >> ./script/generate scaffold_resource task name:string description:text >> cas_link:string >> >> and the rake rspec and fix whatever errors show up there? >> >> What are your thoughts? TIA > > Hi Stephen, > > The approach I like to take is to follow the guidance of the system > (cucumber + rspec) every step of the way. Right now there are no > passing steps, so I'd write the code for the 1st pending step, run the > features and find the first thing that is missing or failing. > > In the example you've provided, I'd very likely write code like what > you wrote for the first Given step. I imagine that running that > feature would produce an error saying that there is nothing named > Task. > > At that point I've gone in two different directions. The more purist > approach would be to create the model at this point - not the scaffold > - as that's the only thing you actually need at this moment to > progress. > > I've also made the scaffold at this point. Typically I end up cutting > out a bunch of crap I don't need and from time to time I don't clear > out all the crap I don't need, discovering later that I've got excess > code floating around the system. This is the motivation for avoiding > code generation. It's a tradeoff. > > Either way, once that step is passing (by creating the model or > scaffold and then running the migrations), I'd move on to the next > step. Just work your way down, one step at a time. > > As your doing this, if you're using the rspec generators, you'll be > generating specs as you go. Any time that you need to actually > implement something in the code that is not generated, I'd head to the > specs to drive that additional behaviour out at the object level. > > If you follow this with serious discipline, you'll end up with two > concentric cycles that both follow a Red/Green/Refactor cycle, meeting > at the Green points.
Actually, they're not concentric - one is smaller and completely inside the other, but they meet at one point in the circumference (so they don't share a center). > > One nice visual analogy for this is a two speed bicycle. The lower > gear, the bigger circle, is the Cucumber cycle. You work there until > you have a failing step, at which point you shift into high gear, > which is the smaller circle, the RSpec cycle. At the point that all > specs are passing and the last failing step is now passing, you shift > back to low gear (Cucumber) and work there until you have a failing > step. Rinse, repeat. > > This is how I describe this in The RSpec Book, btw, so tell me now if > it doesn't make sense :) > > HTH, > David > >> >> -- >> Stephen Veit >> 314-616-9688 >> >> _______________________________________________ >> 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