rspec Spec::Example::Configuration question

M

Mark Ryall

[Note: parts of this message were removed to make it a legal post.]

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
 
D

David Chelimsky

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,285
Messages
2,571,416
Members
48,111
Latest member
PorterZ31

Latest Threads

Top