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?


>
>
>
> 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

Reply via email to