const { Before, Given, When, Then, defineParameterType } = require('cucumber') const { expect } = require('chai') defineParameterType({ name: 'tobe', regexp: [ /is/, /is not/ ], transformer: x => x === 'is' }) When('I interpret "to be" as a type', function () { }) Then('true {tobe} true', function (predicate) { expect(predicate).to.be.true }) Then('false {tobe} true', function (predicate) { expect(predicate).to.be.false }) defineParameterType({ name: 'date', regexp: /\d{2}\.\d{2}\.\d{4}/ }) When('a date {date} is given', function (dateString) { const parts = dateString.split('.').reverse() this.date = new Date(...parts) }) Then('it gets converted to a Date object', function () { expect(this.date).to.be.an.instanceof(Date) }) Before(function () { this.count = 0 }) Given(/(a regular expression|it) matches (this|that) pattern/, function (_, _) { ++this.count }) Then('the step definition should be called twice', function () { expect(this.count).to.equal(2) })