Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

CucumberJS - Error: Step timed out after 5000 milliseconds at Timer.listOnTimeout (timers.js:92:15)

Ask Question

I'm new to cucumberjs and just trying out my first attempt at running a feature. I've built the feature that is on the cucumber-js github page . I get this error when trying to run it:

Benjamins-MBP:Features Ben$ cucumber.js example.feature Feature: Example feature

As a user of cucumber.js I want to have documentation on cucumber So that I can concentrate on building awesome applications

Scenario: Reading documentation # example.feature:6 Given I am on the Cucumber.js GitHub repository # StepDefinitions/myStepDefinition.js:4 Error: Step timed out after 5000 milliseconds at Timer.listOnTimeout (timers.js:92:15) When I go to the README file # StepDefinitions/myStepDefinition.js:15 Then I should see "Usage" as the page title # StepDefinitions/myStepDefinition.js:22

Failing scenarios: example.feature:6 # Scenario: Reading documentation

1 scenario (1 failed) 3 steps (1 failed, 2 skipped) 0m05.001s

What would one do to try to make this feature pass, given it is the example feature on the cucumber-js github page so probably not incorrect?

Here is all the code:

    // features/step_definitions/myStepDefinitions.js
module.exports = function () {
  this.Given(/^I am on the Cucumber.js GitHub repository$/, function (callback) {
    // Express the regexp above with the code you wish you had.
    // `this` is set to a World instance.
    // i.e. you may use this.browser to execute the step:
    this.visit('https://github.com/cucumber/cucumber-js', callback);
    // The callback is passed to visit() so that when the job's finished, the next step can
    // be executed by Cucumber.
  this.When(/^I go to the README file$/, function (callback) {
    // Express the regexp above with the code you wish you had. Call callback() at the end
    // of the step, or callback.pending() if the step is not yet implemented:
    callback.pending();
  this.Then(/^I should see "(.*)" as the page title$/, function (title, callback) {
    // matching groups are passed as parameters to the step definition
    var pageTitle = this.browser.text('title');
    if (title === pageTitle) {
      callback();
    } else {
      callback(new Error("Expected to be on page with title " + title));

The feature:

Feature: Example feature
  As a user of cucumber.js
  I want to have documentation on cucumber
  So that I can concentrate on building awesome applications
  Scenario: Reading documentation
    Given I am on the Cucumber.js GitHub repository
    When I go to the README file
    Then I should see "Usage" as the page title

the world.js file:

// features/support/world.js
var zombie = require('zombie');
function World() {
  this.browser = new zombie(); // this.browser will be available in step definitions
  this.visit = function (url, callback) {
    this.browser.visit(url, callback);
module.exports = function() {
  this.World = World;
module.exports = function () {
    this.World = require(__base +'tests/e2e/support/world.js').World;
    // I wait "{time}" seconds
    this.Given(/^I wait "?([^"]*)"? seconds$/, function (time) {
        return browser.sleep(time * 1000);

world.js

var World, chai, chaiAsPromised;
chai             = require('chai');
chai_as_promised = require('chai-as-promised');
World = function World (callback) {
    chai.use(chai_as_promised);
    this.expect = chai.expect;
    callback();
module.exports.World = World;
                nevermind, it was not working due to an incorrect reference to the env file on my side. The configure gets called automagically()
– Sam Vloeberghs
                Aug 31, 2016 at 8:29

In my case I've had to set the default timeout in the defineSupportCode, because trying to modify the timeout in the webdriver didn't provide any effect

defineSupportCode(function({Given, When, Then, setDefaultTimeout}) {
    setDefaultTimeout(60 * 1000);
    Given('I am on the Cucumber.js GitHub repository', function() {

Refer to this part of the doc

Replacing the this.Given in the step definitions with the syntax used for a promise, is what has fixed it for me on two different OSX environments.

Here is the promise syntax that works:

this.Given(/^I am on the Cucumber.js GitHub repository$/, function () {
  // Notice how `callback` is omitted from the parameters
  return this.visit('https://github.com/cucumber/cucumber-js');
  // A promise, returned by zombie.js's `visit` method is returned to Cucumber.
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.