Module: Spec::Runner

Module | Spec::Runner
In: | lib/spec/runner/backtrace_tweaker.rb lib/spec/runner/class_and_arguments_parser.rb lib/spec/runner/command_line.rb lib/spec/runner/drb_command_line.rb lib/spec/runner/example_group_runner.rb lib/spec/runner/formatter/base_formatter.rb lib/spec/runner/formatter/base_text_formatter.rb lib/spec/runner/formatter/failing_example_groups_formatter.rb lib/spec/runner/formatter/failing_examples_formatter.rb lib/spec/runner/formatter/html_formatter.rb lib/spec/runner/formatter/profile_formatter.rb lib/spec/runner/formatter/progress_bar_formatter.rb lib/spec/runner/formatter/snippet_extractor.rb lib/spec/runner/formatter/specdoc_formatter.rb lib/spec/runner/formatter/story/html_formatter.rb lib/spec/runner/formatter/story/plain_text_formatter.rb lib/spec/runner/formatter/text_mate_formatter.rb lib/spec/runner/heckle_runner.rb lib/spec/runner/heckle_runner_unsupported.rb lib/spec/runner/option_parser.rb lib/spec/runner/options.rb lib/spec/runner/reporter.rb lib/spec/runner/spec_parser.rb lib/spec/runner.rb

## ExampleGroups and Examples

Rather than expressing examples in classes, RSpec uses a custom DSLL (DSL light) to describe groups of examples.

A ExampleGroup is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context in which you will run your executable example - a set of known objects in a known starting state. We begin be describing

      describe Account do

        before do
          @account = Account.new
        end

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

      end

We use the before block to set up the Example (given), and then the it method to hold the example code that expresses the event (when) and the expected outcome (then).

## Helper Methods

A primary goal of RSpec is to keep the examples clear. We therefore prefer less indirection than you might see in xUnit examples and in well factored, DRY production code. We feel that duplication is OK if removing it makes it harder to understand an example without having to look elsewhere to understand its context.

That said, RSpec does support some level of encapsulating common code in helper methods that can exist within a context or within an included module.

## Setup and Teardown

You can use before and after within a Example. 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 behaviour, respectively before the first `before :each` and after the last `after :each`. 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 a context:

      describe "..." do

        it "..." do
          helper_method
        end

        def helper_method
          ...
        end

      end

## Included helper methods

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

      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

### Methods

configure

### Classes and Modules

Module Spec::Runner::Formatter
Class Spec::Runner::BacktraceTweaker
Class Spec::Runner::ClassAndArgumentsParser
Class Spec::Runner::CommandLine
Class Spec::Runner::DrbCommandLine
Class Spec::Runner::ExampleGroupRunner
Class Spec::Runner::HeckleRunner
Class Spec::Runner::Heckler
Class Spec::Runner::NoisyBacktraceTweaker
Class Spec::Runner::OptionParser
Class Spec::Runner::Options
Class Spec::Runner::QuietBacktraceTweaker
Class Spec::Runner::Reporter
Class Spec::Runner::SpecParser

### Constants

BehaviourRunner | = | ExampleGroupRunner |  | TODO: BT - Deprecate BehaviourRunner?

### Public Class methods

configure() {|configuration| ...}

Use this to configure various configurable aspects of RSpec:

      Spec::Runner.configure do |configuration|
        # Configure RSpec here
      end

The yielded `configuration` object is a Spec::Example::Configuration instance. See its RDoc for details about what you can do with it.

[Source]

         # File lib/spec/runner.rb, line 183
    183:       def configure
    184:         yield configuration
    185:       end

[Validate]