John Kolokotronis
2009-Feb-04 09:07 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
Hi all, I''m new to Rspec but loving it so far and looking to use it as a replacement for a Test::Unit framework I have which drives a web app via Watir. So far, things have worked very well with Rspec but I can''t get my head around how before/after(:all) blocks would work in nested groups, or even if what I am doing is possible. What I want to do is something like this: describe "This is a set of tests: " do before(:all) do puts "this should only appear once" end describe "Test 1" do puts "test 1" end describe "Test 2" do puts "test 2" end end Expecting the before(:all) block to run only once and see something like: - this should only appear once - test 1 - test 2 but what I am getting is: - this should only appear once - test 1 - this should only appear once - test 2 So my question is, how can you add before/after(:all) blocks that run once and only once for for all examples, if all the examples are nested in one main describe block? Is that something that''s even possible? I''d appreciate any pointers anyone may have. Thanks! Regards, John
David Chelimsky
2009-Feb-04 14:03 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
On Wed, Feb 4, 2009 at 3:07 AM, John Kolokotronis <johnjkle at gmail.com> wrote:> Hi all, > > I''m new to Rspec but loving it so far and looking to use it as a > replacement for a Test::Unit framework I have which drives a web app > via Watir. So far, things have worked very well with Rspec but I can''t > get my head around how before/after(:all) blocks would work in nested > groups, or even if what I am doing is possible. > > What I want to do is something like this: > > describe "This is a set of tests: " do > before(:all) do > puts "this should only appear once" > end > > describe "Test 1" do > puts "test 1" > end > > describe "Test 2" do > puts "test 2" > end > end > > Expecting the before(:all) block to run only once and see something > like: > > - this should only appear once > - test 1 > - test 2 > > but what I am getting is: > > - this should only appear once > - test 1 > - this should only appear once > - test 2 > > So my question is, how can you add before/after(:all) blocks that run > once and only once for for all examples, if all the examples are > nested in one main describe block? Is that something that''s even > possible? I''d appreciate any pointers anyone may have. Thanks!Right now it''s not possible. There''s an open ticket on this: http://rspec.lighthouseapp.com/projects/5645/tickets/632> > Regards, > > John > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
John Kolokotronis
2009-Feb-04 15:07 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
Thanks for the reply David - much appreciated. At least now I know that it can''t be done, rather than pursuing it further for now. I''ll just have to live without that functionality for now and add it later on if a fix is made available. Regards, John On Feb 4, 2:03?pm, David Chelimsky <dchelim... at gmail.com> wrote:> On Wed, Feb 4, 2009 at 3:07 AM, John Kolokotronis <johnj... at gmail.com> wrote: > > Hi all, > > > I''m new to Rspec but loving it so far and looking to use it as a > > replacement for a Test::Unit framework I have which drives a web app > > via Watir. So far, things have worked very well with Rspec but I can''t > > get my head around how before/after(:all) blocks would work in nested > > groups, or even if what I am doing is possible. > > > What I want to do is something like this: > > > describe "This is a set of tests: " do > > ? ? ? ?before(:all) do > > ? ? ? ? ? ? ? ?puts "this should only appear once" > > ? ? ? ?end > > > ? ? ? ?describe "Test 1" do > > ? ? ? ? ? ? ? ?puts "test 1" > > ? ? ? ?end > > > ? ? ? ?describe "Test 2" do > > ? ? ? ? ? ? ? ?puts "test 2" > > ? ? ? ?end > > end > > > Expecting the before(:all) block to run only once and see something > > like: > > > - this should only appear once > > - test 1 > > - test 2 > > > but what I am getting is: > > > - this should only appear once > > - test 1 > > - this should only appear once > > - test 2 > > > So my question is, how can you add before/after(:all) blocks that run > > once and only once for for all examples, if all the examples are > > nested in one main describe block? Is that something that''s even > > possible? I''d appreciate any pointers anyone may have. Thanks! > > Right now it''s not possible. There''s an open ticket on this: > > http://rspec.lighthouseapp.com/projects/5645/tickets/632 > > > > > Regards, > > > John > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
Scott Taylor
2009-Feb-04 15:30 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
John Kolokotronis wrote:> Hi all, > > I''m new to Rspec but loving it so far and looking to use it as a > replacement for a Test::Unit framework I have which drives a web app > via Watir. So far, things have worked very well with Rspec but I can''t > get my head around how before/after(:all) blocks would work in nested > groups, or even if what I am doing is possible. > > What I want to do is something like this: > > describe "This is a set of tests: " do > before(:all) do > puts "this should only appear once" > end > > describe "Test 1" do > puts "test 1" > end > > describe "Test 2" do > puts "test 2" > end > end > > Expecting the before(:all) block to run only once and see something > like: > > - this should only appear once > - test 1 > - test 2 > > but what I am getting is: > > - this should only appear once > - test 1 > - this should only appear once > - test 2 > > So my question is, how can you add before/after(:all) blocks that run > once and only once for for all examples, if all the examples are > nested in one main describe block? Is that something that''s even > possible? I''d appreciate any pointers anyone may have. Thanks! > >Why do you want before(:all)? Generally it''s use is disregarded, just as global variables are considered harmful, not because they can''t be used well, but because 99% of the times they aren''t. Scott
John Kolokotronis
2009-Feb-04 17:55 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
> Why do you want before(:all)? ?Generally it''s use is disregarded, just > as global variables are considered harmful, not because they can''t be > used well, but because 99% of the times they aren''t.Because I want to be able to create a single @browser object at the beginning of my tests and have it passed to all examples. Without nested examples, that works just fine - I can create my browser instance in the before(:all) block and avoid using a global variable. In nested examples, I don''t see a good way to do that - I could always set up the browser instance as a global (did that in the past with Test::Unit and many Watir users do so) but I''d like to avoid this. If I didn''t use a before(:all) block or a global variable, would there be any way to pass my browser object to all example groups? Currently my tests look like this: describe "A series of tests" do before(:all) do @browser = Watir::Browser.new end it "Test 1: it should go to www.google.com" do @browser.goto("www.google.com") end end Obviously, been able to use nested describe groups would make the tests easier to read for non-coders here and that''s why I wanted to use them... Regards, John
Matt Wynne
2009-Feb-05 07:48 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
On 4 Feb 2009, at 17:55, John Kolokotronis wrote:>> Why do you want before(:all)? Generally it''s use is disregarded, >> just >> as global variables are considered harmful, not because they can''t be >> used well, but because 99% of the times they aren''t. > > Because I want to be able to create a single @browser object at the > beginning > of my tests and have it passed to all examples. Without nested > examples, thatHave you considered using Cucumber rather than RSpec as the driver to run these tests? Matt Wynne http://blog.mattwynne.net http://www.songkick.com
John Kolokotronis
2009-Feb-05 09:10 UTC
[rspec-users] [Rspec] How do you nest before(:all) or after(:all) blocks?
> Have you considered using Cucumber rather than RSpec as the driver to ? > run these tests?TBH, I haven''t really looked at Cucumber much, as I''m just getting started with Rspec itself. My impression though was that Cucumber replaced the story runner and the way my tests are structured just seems better suited to Rspec, rather than written as user stories...