Module: Cucumber::RbSupport::RbWorld

Defined in:
lib/cucumber/rb_support/rb_world.rb

Overview

Defines the basic DSL methods availlable in all Cucumber step definitions.

You can, and probably should, extend this DSL with your own methods that make sense in your domain. For more on that, see Cucumber::RbSupport::RbDsl#World

Instance Method Summary collapse

Instance Method Details

#announce(*messages) ⇒ Object

Deprecated.

Use #puts instead.



84
85
86
87
# File 'lib/cucumber/rb_support/rb_world.rb', line 84

def announce(*messages)
  STDERR.puts AnsiEscapes.failed + "WARNING: #announce is deprecated. Use #puts instead:" + caller[0] + AnsiEscapes.reset
  puts(*messages)
end

#ask(question, timeout_seconds = 60) ⇒ Object

Pause the tests and ask the operator for input



106
107
108
# File 'lib/cucumber/rb_support/rb_world.rb', line 106

def ask(question, timeout_seconds=60)
  @__cucumber_runtime.ask(question, timeout_seconds)
end

#doc_string(string_without_triple_quotes, content_type = '', line_offset = 0) ⇒ Object

Create an Ast::DocString object

Useful in conjunction with the #step method, when want to specify a content type.

Examples:

Create a multiline string

code = multiline_string(%{
  puts "this is ruby code"
%}, 'ruby')


77
78
79
80
81
# File 'lib/cucumber/rb_support/rb_world.rb', line 77

def doc_string(string_without_triple_quotes, content_type='', line_offset=0)
  STDERR.puts AnsiEscapes.failed + "WARNING: #doc_string is deprecated. Just pass a regular String instead:" + caller[0] + AnsiEscapes.reset
  # TODO: rename this method to multiline_string
  @__cucumber_runtime.doc_string(string_without_triple_quotes, content_type, line_offset)
end

#embed(file, mime_type, label = 'Screenshot') ⇒ Object

Embed an image in the output



111
112
113
# File 'lib/cucumber/rb_support/rb_world.rb', line 111

def embed(file, mime_type, label='Screenshot')
  @__cucumber_runtime.embed(file, mime_type, label)
end

#inspectObject

Prints the list of modules that are included in the World



135
136
137
138
139
140
141
# File 'lib/cucumber/rb_support/rb_world.rb', line 135

def inspect
  modules = [self.class]
  (class << self; self; end).instance_eval do
    modules += included_modules
  end
  sprintf("#<%s:0x%x>", modules.join('+'), self.object_id)
end

#pending(message = "TODO") ⇒ Object

Mark the matched step as pending.



116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/cucumber/rb_support/rb_world.rb', line 116

def pending(message = "TODO")
  if block_given?
    begin
      yield
    rescue Exception
      raise Pending, message
    end
    raise Pending, "Expected pending '#{message}' to fail. No Error was raised. No longer pending?"
  else
    raise Pending, message
  end
end

#puts(*messages) ⇒ Object

Note:

Cucumber might surprise you with the behaviour of this method. Instead of sending the output directly to STDOUT, Cucumber will intercept and cache the message until the current step has finished, and then display it.

If you’d prefer to see the message immediately, call Kernel.puts instead.

Print a message to the output.



96
97
98
99
100
101
102
103
# File 'lib/cucumber/rb_support/rb_world.rb', line 96

def puts(*messages)
  # Even though they won't be output until later, converting the messages to
  # strings right away will protect them from modifications to their original
  # objects in the mean time
  messages.collect! { |message| "#{message}" }

  @__cucumber_runtime.puts(*messages)
end

#skip_this_scenario(message = "Scenario skipped") ⇒ Object

Skips this step and the remaining steps in the scenario

Raises:

  • (Core::Test::Result::Skipped)


130
131
132
# File 'lib/cucumber/rb_support/rb_world.rb', line 130

def skip_this_scenario(message = "Scenario skipped")
  raise Core::Test::Result::Skipped, message
end

#step(name, raw_multiline_arg = nil) ⇒ Object

Run a single Gherkin step

Examples:

Call another step

step "I am logged in"

Call a step with quotes in the name

step %{the user "Dave" is logged in}

Passing a table

step "the following users exist:", table(%{
  | name  | email           |
  | Matt  | [email protected]   |
  | Aslak | [email protected] |
})

Passing a multiline string

step "the email should contain:", "Dear sir,\nYou've won a prize!\n"

Parameters:

  • name (String)

    The name of the step

  • multiline_argument (String, Cucumber::Ast::DocString, Cucumber::Ast::Table)


38
39
40
41
# File 'lib/cucumber/rb_support/rb_world.rb', line 38

def step(name, raw_multiline_arg=nil)
  location = Core::Ast::Location.of_caller
  @__cucumber_runtime.invoke_dynamic_step(name, MultilineArgument.from(raw_multiline_arg, location))
end

#steps(steps_text) ⇒ Object

Run a snippet of Gherkin

Examples:

steps %{
  Given the user "Susan" exists
  And I am logged in as "Susan"
}

Parameters:

  • steps_text (String)

    The Gherkin snippet to run



50
51
52
53
# File 'lib/cucumber/rb_support/rb_world.rb', line 50

def steps(steps_text)
  location = Core::Ast::Location.of_caller
  @__cucumber_runtime.invoke_dynamic_steps(steps_text, @__natural_language, location)
end

#table(text_or_table, file = nil, line_offset = 0) ⇒ Object

Parse Gherkin into a Ast::Table object.

Useful in conjunction with the #step method.

Examples:

Create a table

users = table(%{
  | name  | email           |
  | Matt  | [email protected]   |
  | Aslak | [email protected] |
})

Parameters:

  • text_or_table (String)

    The Gherkin string that represents the table



65
66
67
# File 'lib/cucumber/rb_support/rb_world.rb', line 65

def table(text_or_table, file=nil, line_offset=0)
  @__cucumber_runtime.table(text_or_table, file, line_offset)
end

#to_sObject

see #inspect



144
145
146
# File 'lib/cucumber/rb_support/rb_world.rb', line 144

def to_s
  inspect
end

#Transform(arg) ⇒ Object

Call a Transform with a string from another Transform definition



15
16
17
18
# File 'lib/cucumber/rb_support/rb_world.rb', line 15

def Transform(arg)
  rb = @__cucumber_runtime.support_code.ruby
  rb.execute_transforms([arg]).first
end