module Spinach::DSL::ClassMethods
Class methods to extend the host class.
Attributes
The feature name.
Public Instance Methods
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
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
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
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
Get the list of step names in this class
# File lib/spinach/dsl.rb, line 147 def steps @steps ||= [] end
Private Instance Methods
# 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
# 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