Rspec Spec::Example::Configuration question

Can anyone point me in the direction of the correct way to use rspec’s
configuration class to mixin modules into example groups (and add
before/after blocks) according to type.

http://rspec.info/rdoc/classes/Spec/Example/Configuration.html

I expected the following (very silly and contrived) code to
prepend_before,
prepend_after and include their respective blocks/mixin only for the
specs
with :type => :awe_inspiring but find that they get applied to all
example
groups.

require ‘spec’

module AMixin
def wow
end
end

Spec::Runner.configure do |config|
config.include(AMixin, :type => :awe_inspiring)
config.prepend_before(:type => :awe_inspiring) do
puts ‘before awe_inspiring test’
end
config.prepend_after(:type => :awe_inspiring) do
puts ‘after awe_inspiring test’
end
end

describe ‘without enthusiasm’, :type => :mediocre do
it “should do something without enthusiasm” do
puts ‘have wow’ if self.respond_to?(:wow)
end
end

describe ‘with enthusiasm’, :type => :awe_inspiring do
it “should do something with enthusiasm” do
puts ‘have wow’ if self.respond_to?(:wow)
end
end

On Mon, Mar 17, 2008 at 1:04 AM, Mark R. [email protected]
wrote:

Can anyone point me in the direction of the correct way to use rspec’s
configuration class to mixin modules into example groups (and add
before/after blocks) according to type.

http://rspec.info/rdoc/classes/Spec/Example/Configuration.html

I expected the following (very silly and contrived) code to prepend_before,
prepend_after and include their respective blocks/mixin only for the specs
with :type => :awe_inspiring but find that they get applied to all example
groups.

:type => :whatever is not an arbitrary tagging system. It supports
creating your own custom types of ExampleGroups. If it can’t find one
registered with the key, it gives you the default.

puts 'before awe_inspiring test'

end

describe ‘with enthusiasm’, :type => :awe_inspiring do
it “should do something with enthusiasm” do
puts ‘have wow’ if self.respond_to?(:wow)
end
end

You should be able to do something like this:

class AweInspiring < Spec::Example::ExampleGroup
def wow;end
Spec::Example::ExampleGroupFactory.register(:awe_inspiring, self)
end

Now you could use describe ‘with enthusiasm’, :type => :awe_inspiring
do and not have to worry about setting up the config to mix modules
in.

HTH,
David