Sorry for the double post. Seems I haven't acquired the patience for mailing lists yet :)
I had another idea which might scratch the itch, or might seem horrible: Take this example from some rails controller specs describe SiteImagesController, request = "get :index" do context "As a visitor:" do before(:each) {stub_admin_check @controller, false} should_not_execute :index, request end I was just looking at this and thought why not switch the string to the context helper. Something more like context as_a_visitor do should_not_execute :index, request end where as_a_visitor handles the stubbing and returns the documentation string? On Sep 21, 2:50 am, nruth <nick.rutherf...@gmail.com> wrote: > My last reply seems to have been swallowed by the Ajax monster. > > In brief, my suggestion is just for readability/maintenance. I feel > the describe/context and before blocks are the same thing put in two > places, one being documentation and the other implementation. > Splitting them up like this seems like asking for trouble. > > That said, before blocks do achieve the same result, albeit somewhat > inside out, and if put just after the describe it's clear what is > going on. > > It's fair enough (particularly at this stage of development) to say > that the onus should be on the spec author rather than the tools to > write legible specs. > > Thanks for the reply > Cheers > > Nick > > On Sep 20, 9:56 pm, David Chelimsky <dchelim...@gmail.com> wrote: > > > > > On Sun, Sep 20, 2009 at 9:38 AM, nruth <nick.rutherf...@gmail.com> wrote: > > > I've been reading through the Rspec book to see if I missed any > > > tricks, and the discussion of before block use for context setup in > > > sec 12.6 struck me as interesting and something I had a knee-jerk > > > reaction to. > > > > I think that when you are using nested examples to describe a context > > > change it is bad practice to allow any example within that group to > > > run outside of that context. This could happen simply because you > > > forgot to copy and paste (ouch) the setup code into your expectation. > > > > before blocks solve this problem, but they are so tightly coupled to > > > the describe call in this case, why not make them a describe method > > > parameter? Ideally they would be the block passed to describe, but we > > > can't do that since the example group is using that already. > > > > So I would propose something like this sketch: > > > > describe "a new capacity 10 stack", :context => lambda {...@stack = > > > Stack.new(:capacity => 10)} do > > > describe "with 4 pushed ints", :context => lambda { 4.times { @stack > > > << rand(:int) } } do > > > it "should allow push and return the new size" do > > > �...@stack.push(rand(:int)).should == 5 > > > end > > > end > > > end > > > > And the :context would just be executed as if it were a before block. > > > > Of course you can arrange your specs so that the before block is > > > directly after the describe, or similar, but this seems a nice > > > alternative to me. > > > The order of the before blocks, relative to the examples, is > > irrelevant. An example group loads up all of its examples and before > > and after blocks before anything is run. In other words, these two > > will have the same effect: > > > describe Thing do > > before(:each) { @thing = Thing.new } > > it "does something" do > > @thing.should do_something > > end > > end > > > describe Thing do > > it "does something" do > > @thing.should do_something > > end > > before(:each) { @thing = Thing.new } > > end > > > This is not the first time your idea has come up, and I've not > > included it before because I want to avoid assigning specific meaning > > to keys in the hash passed to describe(). rspec-2 will be using that > > hash as part of a plugin API, so the more I can leave available, the > > better. I'll be posting more about that soon, but first things first - > > gotta get the book off to the printer :) > > > Cheers, > > David > > > > It's a nubile idea though. Thoughts? > > > _______________________________________________ > > rspec-users mailing list > > rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > 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