Search code examples
javascriptcucumberbddassert

cucumber.js And is not a function


I am practicing in writing some unit test by BDD use cucmber.js. When I try to use 'And' statement. The error shows that

TypeError: And is not a function

Here is my code

.feature

Feature: dataTable
Scenario Outline: <a> + <b> + <c> = <answer>
  Given I had number <a>
    And I add another number <b>
  When I add with <c>   
  Then I got answer <answer>

Examples:
|a|b|c|answer|
|1|2|3|6|
|10|15|25|50|

.stepDefinition

defineSupportCode(function({Given,When,Then,And}){
  let ans = 0;
  Given('I had number {int}', function(input){
    ans = input
  })
  And('I add another number {int}',function(input){
    ans += input
  })
  When('I add with {int}',function(input){
    ans += input
  })
  Then('I got answer {int}', function(input){
    assert.equal(ans,input)
  })
})

and the error message is like below:

TypeError: Add is not a function
    at ...  // my file location
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] cucumber: `cucumber.js ./test/e2e/Features -r ./test/e2e/StepDefinition`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] cucumber script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/lab1321_mac_air/.npm/_logs/2018-01-04T08_15_28_568Z-debug.log

I wonder if I wrote something wrong. Thanks!


Solution

  • And and But are syntactical sugar for the feature file - in other words, they are aliases for Given, When and Then.

    When you are defining the step, you should use Given, When and Then to describe what the step is trying to achieve (a prerequisite, an action or an outcome), and then if you have more than one prerequisite, action or outcome, use And or But in your feature file only.