Module: Spec::DSL::Main

Includes:
Example::ArgsAndOptions
Defined in:
lib/spec/dsl/main.rb

Instance Method Summary collapse

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?
  add_options(args, :scope => self)
  set_location(args.options, 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]
    add_options(args)
    set_location(args.options, caller(0)[1])
    Object.const_set(name, Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block))
  rescue NameError => e
    raise NameError.new(e.message + "\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: shared_examples_for

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)
  add_options(args)
  set_location(args.options, caller(0)[1])
  Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block)
end