@overload #shared_examples(name,
&block) @overload #shared_examples(name,
tags, &block)
Wraps the `block` in a module which can then be included in example groups
using `include_examples`, `include_context`, or `it_behaves_like`.
@param [String] name to match when looking up this shared group @param
block to be eval'd in a nested example group generated by
`it_behaves_like`
@example
shared_examples "auditable" do
it "stores an audit record on save!" do
lambda { auditable.save! }.should change(Audit, :count).by(1)
end
end
class Account do
it_behaves_like "auditable" do
def auditable; Account.new; end
end
end
@see ExampleGroup.it_behaves_like @see RSpec::Core::ExampleGroup.include_examples
@see RSpec::Core::ExampleGroup.include_context
def shared_examples *args, &block
if key? args.first
key = args.shift
raise_key_taken key if key_taken? key
RSpec.world.shared_example_groups[key] = block
end
unless args.empty?
mod = Module.new
(class << mod; self; end).send :define_method, :extended do |host|
host.class_eval(&block)
end
RSpec.configuration.extend mod, *args
end
end