On 8/6/07, David Chelimsky <[EMAIL PROTECTED]> wrote: > On 8/6/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > Is it possible to access the described class in a shared behavior? I'm > > trying to do something like this: > > > > describe "Siberian feline", :shared => true do > > described_class_instance_as :feline, :name => "fluffy", :breed => > > "Siberian" > > > > # or maybe > > > > before(:all) do > > @feline = described_class.new(:name => "fluffy", :breed => "Siberian") > > end > > > > it "should have long hair" do > > @feline.should be_long_haired > > end > > end > > > > describe SiberianCat, "(a subclass of, say, Cat)" do > > it_should_behave_like "Siberian feline" > > > > it "should purr" do > > @feline.sound.should == "purr" > > end > > end > > > > describe SiberianTiger, "(a subclass of BigCat)" do > > it_should_behave_like "Siberian feline" > > > > it "should roar" do > > @feline.sound.should == "roar" > > end > > end > > > > > > > > I'm looking for something more elegant than my current way, which is like > > so: > > > > describe "Siberian felines", :shared => true do > > before(:all) do > > @feline = @klass.new(:name => "fluffy", :breed => "Siberian") > > end > > > > it "should have long hair" do > > @feline.should be_long_haired > > end > > end > > > > describe SiberianCat, "(a subclass of, say, Cat)" do > > it_should_behave_like "Siberian felines" > > > > before(:all) do > > @klass = SiberianCat > > end > > > > it "should purr" do > > @feline.sound.should == "purr" > > end > > end > > > > describe SiberianTiger, "(a subclass of BigCat)" do > > it_should_behave_like "Siberian felines" > > > > before(:all) do > > @klass = SiberanTiger > > end > > > > it "should roar" do > > @feline.sound.should == "roar" > > end > > end > > > > The way you're approaching it means that if something changes about > the initializer for the SiberianTiger that doesn't change for the > initializer of the SiberianCat, you're kinda screwed. I'd do it like > this: http://pastie.caboo.se/85444 > > This keeps the shared behaviour very simple (all it needs is an > instance variable) and puts control of the object you're dealing with > in the spec. > > WDYT?
Also - side note - before(:each) is preferred over before(:all) because it's better to be sure that each example starts with a clean slate. If one should change the state of the object you're describing, you could end up with unexpected results and hair-pulling debugging sessions. > > > > > > > > > > Then again, i have a gut feeling that if i took better advantage of > > modules it wouldn't be an issue... > > > > -Ben > > > > _______________________________________________ > > 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