El 23/07/2010, a las 09:09, Ashley Moran escribió:

> I'm looking for the best way to parameterise shared examples.  Imagine (as an 
> academic example...) you were doing it for subclasses of Struct instances (a 
> more realistic example might be ActiveRecord subclasses, or DataMapper 
> resources), such as:
> 
>  class MyStruct < Struct.new(:a, :b)  
>  end
> 
>  class MyOtherStruct < Struct.new(:foo, :bar)
>  end
> 
> 
> I've seen it done with #let, eg:
> 
>  shared_examples_for "a Struct" do
>    it "has methods" do
>      properties.each do |property|
>        struct.should respond_to(property)
>      end
>    end
>  end
> 
>  describe MyStruct do
>    let(:struct) { MyStruct.new }
>    let(:properties) { [:a, :b] }
>    it_should_behave_like "a Struct"
>  end
> 
>  describe MyOtherStruct do
>    let(:struct) { MyOtherStruct.new }
>    let(:properties) { [:foo, :bar] }
>    it_should_behave_like "a Struct"
>  end
> 
> Which is not a bad solution, but does feel a bit too much like using (scoped) 
> global variables for my liking.  There's no explicit association between the 
> shared examples and their parameters (and the arguments actually passed in 
> each example group.

Recently commited (RSpec 2.0.0.beta.18) was the ability to pass a block to 
"it_should_behave_like", making the relation clearer; eg:

  describe MyStruct do
    it_should_behave_like 'a Struct' do
      let(:struct) { MyStruct.new }
    end
  end

I did ask about parametrizing that explicitly via metadata, but David feels 
that the block based approach is better; see the full thread here:

  http://github.com/rspec/rspec-core/issues/71

Wincent



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to