module Spinach::DSL::ClassMethods

Class methods to extend the host class.

Attributes

feature_name[R]

The feature name.

Public Instance Methods

And(step, &block)
Alias for: step
But(step, &block)
Alias for: step
Given(step, &block)
Alias for: step
Then(step, &block)
Alias for: step
When(step, &block)
Alias for: step
after(&block) click to toggle source

Defines a after hook for each scenario. The scope is limited only to the current step class (thus the current feature).

When a scenario is executed, the after each block will be run after any steps

User can define multiple after blocks throughout the class hierarchy and they are chained through the inheritance chain when executing.

@example

class MySpinach::Base < Spinach::FeatureSteps
  after do
    @var1 = 30
    @var2 = 40
  end
end

class MyFeature < MySpinach::Base
  after do
    change_session_timeout_to(original_session_timeout)
    @var2 = 50
  end
end

When running a scenario in MyFeature, @var1 is 30 and @var2 is 50

@api public

# File lib/spinach/dsl.rb, line 127
def after(&block)
  define_before_or_after_method_with_block(:after, &block)
end
before(&block) click to toggle source

Defines a before hook for each scenario. The scope is limited only to the current step class (thus the current feature).

When a scenario is executed, the before each block will be run first before any steps

User can define multiple before blocks throughout the class hierarchy and they are chained through the inheritance chain when executing

@example

class MySpinach::Base< Spinach::FeatureSteps
  before do
    @var1 = 30
    @var2 = 40
  end
end

class MyFeature < MySpinach::Base
  before do
    self.original_session_timeout = 1000
    change_session_timeout_to(1)
    @var2 = 50
  end
end

When running a scenario in MyFeature, @var1 is 30 and @var2 is 50

@api public

# File lib/spinach/dsl.rb, line 96
def before(&block)
  define_before_or_after_method_with_block(:before, &block)
end
feature(name) click to toggle source

Sets the feature name.

@param [String] name

The name.

@example

class MyFeature < Spinach::FeatureSteps
  feature "Satisfy needs"
end

@api public

# File lib/spinach/dsl.rb, line 142
def feature(name)
  @feature_name = name
end
step(step, &block) click to toggle source

Defines an action to perform given a particular step literal.

@param [String] step

The step name.

@param [Proc] block

Action to perform in that step.
If no block is given, step will be defined as pending.

@example

These 3 examples are equivalent:

class MyFeature < Spinach::FeatureSteps
  When "I go to the toilet" do
    @sittin_on_the_toilet.must_equal true
  end
end

class MyFeature < Spinach::FeatureSteps
  step "I go to the toilet" do
    @sittin_on_the_toilet.must_equal true
  end
end

class MyFeature < Spinach::FeatureSteps
  def i_go_to_the_toilet
    @sittin_on_the_toilet.must_equal true
  end
end

@api public

# File lib/spinach/dsl.rb, line 53
def step(step, &block)
  method_body = if block_given? then block
                else lambda { pending "step not implemented" }
                end

  define_method(Spinach::Support.underscore(step), &method_body)
  steps << step
end
Also aliased as: Given, When, Then, And, But
steps() click to toggle source

Get the list of step names in this class

# File lib/spinach/dsl.rb, line 147
def steps
  @steps ||= []
end

Private Instance Methods

before_or_after_private_method_name(location) click to toggle source
# File lib/spinach/dsl.rb, line 153
def before_or_after_private_method_name(location)
  hash_value = hash
  class_name = self.name || ""
  class_name = class_name.gsub("::", "__").downcase
  private_method_name = "_#{location}_each_block_#{hash.abs}_#{class_name}" #uniqueness
end
define_before_or_after_method_with_block(location, &block) click to toggle source
Calls superclass method
# File lib/spinach/dsl.rb, line 160
def define_before_or_after_method_with_block(location, &block)
  define_method(before_or_after_private_method_name(location), &block)
  private before_or_after_private_method_name(location)
  private_method_name = before_or_after_private_method_name location
  define_method "#{location}_each" do
    super()
    send(private_method_name)
  end
end