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
: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.
> 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
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