Module: Spec::DSL::Main
- Includes:
- Example::ArgsAndOptions
- Defined in:
- lib/spec/dsl/main.rb
Instance Method Summary collapse
-
#describe(*args, &block) ⇒ Object
(also: #context)
Creates and returns a class that includes the ExampleGroupMethods module.
-
#share_as(name, &block) ⇒ Object
Creates a Shared Example Group and assigns it to a constant.
-
#share_examples_for(*args, &block) ⇒ Object
(also: #shared_examples_for)
Creates an example group that can be shared by other example groups.
Methods included from Example::ArgsAndOptions
#add_options, #args_and_options, #set_location
Instance Method Details
#describe(*args, &block) ⇒ Object Also known as: context
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 example group classes is to have different matcher methods available from within the describe
block.
See Spec::Example::ExampleGroupFactory#register for details about how to register special implementations.
24 25 26 27 28 29 |
# File 'lib/spec/dsl/main.rb', line 24 def describe(*args, &block) raise Spec::Example::NoDescriptionError.new("example group", caller(0)[1]) if args.empty? (args, :scope => self) set_location(args., caller(0)[1]) Spec::Example::ExampleGroupFactory.create_example_group(*args, &block) end |
#share_as(name, &block) ⇒ Object
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
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/spec/dsl/main.rb', line 78 def share_as(name, &block) begin args = [name] (args) set_location(args., caller(0)[1]) Object.const_set(name, Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block)) rescue NameError => e raise NameError.new(e. + "\nThe first argument to share_as must be a legal name for a constant\n") end end |
#share_examples_for(*args, &block) ⇒ Object Also known as:
Creates an example group that can be shared by other example groups
Examples
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
47 48 49 50 51 |
# File 'lib/spec/dsl/main.rb', line 47 def share_examples_for(*args, &block) (args) set_location(args., caller(0)[1]) Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block) end |