[rspec-users] Best way to spec nested modules?...
Nick Hoffman
nick at deadorange.com
Mon Jan 26 13:02:46 EST 2009
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
More information about the rspec-users
mailing list