Proposed deprecation

From Lighthouse - Beautifully Simple Issue Tracking (please
comment there, not here).

Cheers,
David

Proposed Deprecation: do not include modules implicitly

As those of you using RSpec for Rails likely know, Rails Helper Specs
implicitly include the helper module right in the HelperExampleGroup,
so you can do this:

describe DogHelper do
it “should bark” do
bark.should == “woof”
end
end

module DogHelper
def bark
woof
end
end

Personally, I find this to be a bit too magical and confusing. Not to
mention inconsistent with controller and view examples, each of which
provide a convenience object (controller, response) but require that
you interact with this object explicitly.

Because I find this confusing, I’ve been in the habit of wrapping self
in a #helper method, so the above example would look like this:

describe DogHelper do
it “should bark” do
helper.bark.should == “woof”
end
end

That is a lot easier for anyone familiar with rspec to look at and grok
away.

This feature is implemented in rspec core such that any time you
describe a module, that module is included in the ExampleGroup.

It turns out that it causes trouble if you have an initialize method
that accepts one or more arguments. You can get around that by using a
string:

describe “SomeModule” do

end

But I don’t think that really honors the principal of least surprise.

I’d like to deprecate this feature, but I’d like feedback from the
community before I do. Please post your comments to the original
ticket, which can be found at
Lighthouse - Beautifully Simple Issue Tracking.

Thank you,

David