inject is not defined - CodeceptJs and CucumberJs

1.8k views Asked by At

It's my first time using CodeceptJs and I'm struggling to run my feature file as the IDE asks me to implement steps for my scenario but this is already done, so I feel it may be searching for them somewhere other than the specified under the codecept.conf.js file?

When I run npx codeceptjs gherkin:steps or snippets on the terminal I get this message saying Could not include object Step Definition from ./step_definitions/steps.js from module '/Users/myUser/IdeaProjects/codeceptjs_webdriver/step_definitions/steps.js' The "from" argument must be of type string. Received undefined .

I then move the step_definitions folder to inside features as read that this would be the default location for these and now get an inject is not defined error, which may be the actual cause for the issue I'm getting, but not sure what to do to fix it.

I've tried on IntelliJ Ultimate, Webstorm and VSCode but get the same on all of them.

enter image description here

enter image description here

enter image description here

basic.feature

Feature: Business rules
  In order to achieve my goals
  As a persona
  I want to be able to interact with a system

  Scenario: do something
    Given I have a defined step

steps.js

const {Given} = require('cucumber');
const {I} = inject();

Given(/^I have a defined step$/, function () {
    I.amOnPage('/');
});

codecept.conf.js

  exports.config = {
  output: './output',
  helpers: {
    WebDriver: {
      url: 'https:www.google.com',
      browser: 'chrome'
    }
  },
  include: {
    I: './steps_file.js'
  },
  mocha: {},
  bootstrap: null,
  teardown: null,
  hooks: [],
  gherkin: {
    features: './features/*.feature',
    steps: ['./step_definitions/steps.js']
  },
  plugins: {
    screenshotOnFail: {
      enabled: true
    },
    pauseOnFail: {},
    retryFailedStep: {
      enabled: true
    },
    tryTo: {
      enabled: true
    }
  },
  tests: './*_test.js',
  name: 'codeceptjs_webdriver'
}

package.json

 {
  "name": "codeceptjs_webdriver",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "codeceptjs": "^3.0.0",
    "cucumber": "^5.0.1"
  },
  "dependencies": {
    "@codeceptjs/configure": "^0.6.0"
  },
  "description": ""
}

IntelliJ Ultimate 2020.2

enter image description here

And here my Github repo

Thank you very much.

1

There are 1 answers

0
Francislainy Campos On BEST ANSWER

It's working now and I've come back to update it here if useful to someone else.

Was able to keep the steps under step_definitions/steps folder (not the one inside the features folder). To fix the non implemented issue had to install the wdio dependency. In order for this to take effect properly through running npm install both node_modules and package-lock.json had to be deleted to be freshly regenerated.

updated package.json

  {
  "name": "codeceptjs_webdriver",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "npx codeceptjs run"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {
    "@wdio/selenium-standalone-service": "^6.6.2",
    "codeceptjs": "^2.6.8",
    "codeceptjs-assert": "0.0.4",
    "webdriverio": "6.3.6"
  },
  "description": ""
}

updated codecept.conf.js

exports.config = {
output: './output',
  helpers: {
    WebDriver: {
      url: 'https://www.google.com',
      browser: 'chrome'
    }
  },
  include: {
    I: './steps_file.js'
  },
  mocha: {},
  bootstrap: null,
  teardown: null,
  hooks: [],
  gherkin: {
    features: './features/*.feature',
    steps: ['./step_definitions/steps.js']
  },
  plugins: {
    wdio: {
        enabled: true,
        services: ['selenium-standalone']
        // additional config for service can be passed here
    },
    screenshotOnFail: {
      enabled: true
    },
    pauseOnFail: {},
    retryFailedStep: {
      enabled: true
    },
  },
  tests: './*_test.js',
  name: 'codeceptjs_webdriver'
}