diff --git a/reuse/features/reusable.feature b/reuse/features/reusable.feature index 98136ff..20c878d 100644 --- a/reuse/features/reusable.feature +++ b/reuse/features/reusable.feature @@ -3,3 +3,13 @@ Feature: Given a person with name And a person named Jack Then the same function is called for two distinct step definitions + + Scenario: + Given a person with a first name + And a person with the first name Jack + Then the first names are collected by the same function + + Scenario: + Given a person with a last name + And a person with the last name Doe + Then the last names are collected by the same function diff --git a/reuse/features/steps/lodash.js b/reuse/features/steps/lodash.js new file mode 100644 index 0000000..63092e1 --- /dev/null +++ b/reuse/features/steps/lodash.js @@ -0,0 +1,15 @@ +import { Before, Given, Then } from 'cucumber' +import { expect } from 'chai' +import _ from 'lodash' + +function step (name) { + this.names.push(name) +} + +Given('a person with a first name', _.partial(step, 'John')) +Given('a person with the first name {word}', step) + +Then('the first names are collected by the same function', function () { + expect(this.names).to.have.lengthOf(2) + expect(this.names).to.include.members(['John', 'Jack']) +}) diff --git a/reuse/features/steps/ramda.js b/reuse/features/steps/ramda.js new file mode 100644 index 0000000..b7914b8 --- /dev/null +++ b/reuse/features/steps/ramda.js @@ -0,0 +1,15 @@ +import { Before, Given, Then } from 'cucumber' +import { expect } from 'chai' +import R from 'ramda' + +function step (name) { + this.names.push(name) +} + +Given('a person with a last name', R.partial(step, ['Junior'])) +Given('a person with the last name {word}', R.partial(step, [])) + +Then('the last names are collected by the same function', function () { + expect(this.names).to.have.lengthOf(2) + expect(this.names).to.include.members(['Junior', 'Doe']) +}) diff --git a/reuse/features/steps/reusable.js b/reuse/features/steps/reusable.js index 07ac8c5..674756f 100644 --- a/reuse/features/steps/reusable.js +++ b/reuse/features/steps/reusable.js @@ -1,10 +1,6 @@ import { Before, Given, Then } from 'cucumber' import { expect } from 'chai' -Before(function () { - this.names = [] -}) - function step (name) { this.names.push(name) } @@ -13,7 +9,7 @@ function decorator (f, ...args) { if (args.length > 0) { return function () { f.call(this, args[0]) - } + } } else { return f } diff --git a/reuse/features/support/name-world.js b/reuse/features/support/name-world.js new file mode 100644 index 0000000..151d36b --- /dev/null +++ b/reuse/features/support/name-world.js @@ -0,0 +1,5 @@ +import { setWorldConstructor } from 'cucumber' + +setWorldConstructor(function () { + this.names = [] +}) diff --git a/reuse/package-lock.json b/reuse/package-lock.json index f316e83..f44fc93 100644 --- a/reuse/package-lock.json +++ b/reuse/package-lock.json @@ -625,6 +625,16 @@ "regexpu-core": "^4.1.3" } }, + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + } + }, "@babel/preset-env": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz", @@ -784,16 +794,6 @@ "util.promisify": "^1.0.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -967,13 +967,13 @@ } }, "cucumber": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-5.0.3.tgz", - "integrity": "sha512-FsOKcEquPTVzK2sDqshI3Bw8ETztNIrMQ5+Ph8Z8QNaStl7cvIS3M9/T+9zeXvadPJX0jUWkbWcJ91x4gBw9Fg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-5.1.0.tgz", + "integrity": "sha512-zrl2VYTBRgvxucwV2GKAvLqcfA1Naeax8plPvWgPEzl3SCJiuPPv3WxBHIRHtPYcEdbHDR6oqLpZP4bJ8UIdmA==", "dev": true, "requires": { + "@babel/polyfill": "^7.2.3", "assertion-error-formatter": "^2.0.1", - "babel-runtime": "^6.11.6", "bluebird": "^3.4.1", "cli-table3": "^0.5.1", "colors": "^1.1.2", @@ -994,7 +994,7 @@ "mz": "^2.4.0", "progress": "^2.0.0", "resolve": "^1.3.3", - "serialize-error": "^2.1.0", + "serialize-error": "^3.0.0", "stack-chain": "^2.0.0", "stacktrace-js": "^2.0.0", "string-argv": "0.1.1", @@ -1418,8 +1418,7 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "loose-envify": { "version": "1.4.0", @@ -1660,6 +1659,11 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -1676,9 +1680,9 @@ } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", "dev": true }, "regenerator-transform": { @@ -1761,9 +1765,9 @@ "dev": true }, "serialize-error": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz", + "integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==", "dev": true }, "shebang-command": { diff --git a/reuse/package.json b/reuse/package.json index e19ddfc..d538cfc 100644 --- a/reuse/package.json +++ b/reuse/package.json @@ -14,6 +14,10 @@ "@babel/register": "^7.0.0", "babel-loader": "^8.0.4", "chai": "^4.2.0", - "cucumber": "^5.0.3" + "cucumber": "^5.1.0" + }, + "dependencies": { + "lodash": "^4.17.11", + "ramda": "^0.26.1" } }