Module | Spec::Extensions::Main |
In: |
lib/spec/extensions/main.rb
|
Creates and returns a class that includes the ExampleGroupMethods module. Which ExampleGroup type is created depends on the directory of the file calling this method. For example, Spec::Rails will use different classes for specs living in spec/models, spec/helpers, spec/views and spec/controllers.
It is also possible to override autodiscovery of the example group type with an options Hash as the last argument:
describe "name", :type => :something_special do ...
The reason for using different behaviour classes is to have different matcher methods available from within the describe block.
See Spec::Example::ExampleFactory#register for details about how to register special implementations.
# File lib/spec/extensions/main.rb, line 22 22: def describe(*args, &block) 23: raise ArgumentError if args.empty? 24: raise ArgumentError unless block 25: args << {} unless Hash === args.last 26: args.last[:spec_path] = caller(0)[1] 27: Spec::Example::ExampleGroupFactory.create_example_group(*args, &block) 28: end
Creates a Shared Example Group and assigns it to a constant
share_as :AllEditions do it "should do all editions stuff" ... end describe SmallEdition do it_should_behave_like AllEditions it "should do small edition stuff" do ... end end
And, for those of you who prefer to use something more like Ruby, you can just include the module directly
describe SmallEdition do include AllEditions it "should do small edition stuff" do ... end end
# File lib/spec/extensions/main.rb, line 76 76: def share_as(name, &block) 77: begin 78: Object.const_set(name, share_examples_for(name, &block)) 79: rescue NameError => e 80: raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n") 81: end 82: end
Creates an example group that can be shared by other example groups
share_examples_for "All Editions" do it "all editions behaviour" ... end describe SmallEdition do it_should_behave_like "All Editions" it "should do small edition stuff" do ... end end
# File lib/spec/extensions/main.rb, line 46 46: def share_examples_for(name, &block) 47: describe(name, :shared => true, &block) 48: end