Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reuse Cucumber step definition with a table for the last parameter?

This code:

Then %{I should see the following data in the "Feeds" data grid:
                                                   |   Name   |
                                                   | #{name}  |}

And this one:

Then "I should see the following data in the \"Feeds\" data grid:
|   Name   |
| #{name}  |"

And this:

  Then "I should see the following data in the \"Feeds\" data grid:\n|   Name   |\n| #{name}  |"

And even this:

Then <<EOS
I should see the following data in the "Feeds" data grid:
|   Name   |
| #{name}  |
EOS

Gives me:

Your block takes 2 arguments, but the Regexp matched 1 argument.
(Cucumber::ArityMismatchError)
  tests/endtoend/step_definitions/instruments_editor_steps.rb:29:in `/^the editor shows "([^"]*)" in the feeds list$/'
  melomel-0.6.0/lib/melomel/cucumber/data_grid_steps.rb:59:in `/^I should see the following data in the "([^"]*)" data grid:$/'
  tests/endtoend/instruments_editor.feature:11:in `And the editor shows "myFeed" in the feeds list

This one:

Then "I should see the following data in the \"Feeds\" data grid: |   Name   || #{name}  |"

And this one:

Then "I should see the following data in the \"Feeds\" data grid:|   Name   || #{name}  |"

Gives:

Undefined step: "I should see the following data in the "Feeds" data grid:|   Name   || myFeed  |" (Cucumber::Undefined)
  ./tests/endtoend/step_definitions/instruments_editor_steps.rb:31:in `/^the editor shows "([^"]*)" in the feeds list$/'
  tests/endtoend/instruments_editor.feature:11:in `And the editor shows "myFeed" in the feeds list'
like image 602
Nek Avatar asked Oct 27 '10 12:10

Nek


2 Answers

I've found the answer myself:

steps %Q{
Then I should see the following data in the "Feeds" data grid:
                                                |   Name   |
                                                | #{name}  |
}
like image 98
Nek Avatar answered Oct 26 '22 05:10

Nek


NOTE ON THE ABOVE: might seem obvious, but the new line after the first '{' is soooooo important

Another way:

Given /^My basic step:$/ do |table|
  #do table operation
end


Given /^My referring step:$/ do |table|
  table.hashes.each do |row|    
    row_as_table = %{
      |prop1|prop2|
      |#{row[:prop1]}|#{row[:prop2]}|
    }
    Given %{My basic step:}, Cucumber::Ast::Table.parse(row_as_table, "", 0)
  end
end
like image 39
Ben Avatar answered Oct 26 '22 04:10

Ben