On Mon, Mar 17, 2008 at 1:04 AM, Mark Ryall <mark.ryall / gmail.com> 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.

>  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