Module: Spec::Example

Module | Spec::Example
In: | lib/spec/example.rb lib/spec/example/args_and_options.rb lib/spec/example/before_and_after_hooks.rb lib/spec/example/errors.rb lib/spec/example/example_group.rb lib/spec/example/example_group_factory.rb lib/spec/example/example_group_hierarchy.rb lib/spec/example/example_group_methods.rb lib/spec/example/example_group_proxy.rb lib/spec/example/example_matcher.rb lib/spec/example/example_methods.rb lib/spec/example/example_proxy.rb lib/spec/example/module_reopening_fix.rb lib/spec/example/pending.rb lib/spec/example/predicate_matchers.rb lib/spec/example/shared_example_group.rb lib/spec/example/subject.rb

## Example Groups and Code Examples

A Code Example is an executable example of how a bit of code is expected to behave.

An Example Group is a group of code examples.

RSpec exposes a DSL to describe groups of examples.

      describe Account do
        it "should have a balance of $0" do
          account = Account.new
          account.balance.should == Money.new(0, :dollars)
        end
      end

## Before and After

You can use the `before()` and `after()` methods to extract common code within an Example Group. Both methods take an optional scope argument so you can run the block before :each example or before :all examples

      describe "..." do
        before :all do
          ...
        end

        before :each do
          ...
        end

        it "should do something" do
          ...
        end

        it "should do something else" do
          ...
        end

        after :each do
          ...
        end

        after :all do
          ...
        end

      end

The `before :each` block will run before each of the examples, once for each example. Likewise, the `after :each` block will run after each of the examples.

It is also possible to specify a `before :all` and `after :all` block that will run only once for each example group, before the first `before :each` and after the last `after :each` respectively. The use of these is generally discouraged, because it introduces dependencies between the examples. Still, it might prove useful for very expensive operations if you know what you are doing.

## Local helper methods

You can include local helper methods by simply expressing them within an example group:

      describe "..." do

        it "..." do
          helper_method
        end

        def helper_method
          ...
        end

      end

## Included helper methods

You can include helper methods in multiple example groups by expressing them within a module, and then including that module in your example groups:

      module AccountExampleHelperMethods
        def helper_method
          ...
        end
      end

      describe "A new account" do
        include AccountExampleHelperMethods
        before do
          @account = Account.new
        end

        it "should have a balance of $0" do
          helper_method
          @account.balance.should eql(Money.new(0, :dollars))
        end
      end

## Shared Example Groups

You can define a shared example group, that may be used on other 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

You can also assign the shared group to a module and include that

     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

### Classes and Modules

Module Spec::Example::ArgsAndOptions
Module Spec::Example::BeforeAndAfterHooks
Module Spec::Example::ExampleGroupMethods
Module Spec::Example::ExampleMethods
Module Spec::Example::ModuleReopeningFix
Module Spec::Example::Pending
Module Spec::Example::PredicateMatchers
Module Spec::Example::Subject
Class Spec::Example::ExampleGroup
Class Spec::Example::ExampleGroupFactory
Class Spec::Example::ExampleGroupHierarchy
Class Spec::Example::ExampleGroupProxy
Class Spec::Example::ExampleMatcher
Class Spec::Example::ExamplePendingError
Class Spec::Example::ExampleProxy
Class Spec::Example::NoDescriptionError
Class Spec::Example::NotYetImplementedError
Class Spec::Example::PendingExampleFixedError
Class Spec::Example::SharedExampleGroup

[Validate]