On 25/01/2009, at 9:56 PM, Stuart Hungerford wrote:
Hi,

I've got a set of classes in nested Ruby modules which I'm using rspec to specify:

module Foo

   module Baz

      class C1 ... end

      class C2 ... end
   end
end

To specify C2 behaviour I need to create a bunch of C1 instances:

describe Foo::Baz::C2 do

   before(:each) do
       @c1a = Foo::Baz::C1.new(...)
       @c1b = Foo::Baz::C1.new(...)
       @c1c = Foo::Baz::C1.new(...)

       @c2 = Foo::Baz::C2.new(@c1a, @c1b, @c1c)
   end

   describe "some behaviour" do
       # ...
   end
end

After a while the many Foo::Baz:: module prefixes become pretty tedious and
not particularly DRY.

Can someone suggest a better way to manage using nested modules in rspec?

Thanks,

Stu

--
Stuart Hungerford
ANU Supercomputer Facility

Hey Stuart. You should also consider using mocks and stubs. Eg:

module Foo
  module Baz
    before :each do
      @c1a = mock_model C1, ...
      @c1b = mock_model C1, ...
      @c1c = mock_model C1, ...

      @c2 = C2.new @c1a, @c1b, @c1c
    end
  end
end

That way, your specs for class C2 aren't tied to C1's implementation.

One other suggestion I'd make is to use more descriptive variable names, though "c1a" might simply be for example's sake, since we're talking about Foo::Baz::C1, etc.

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

Reply via email to