UNPKG

12.3 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
8
9var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
10 * The MIT License (MIT)
11 *
12 * Copyright (c) 2016 Arnaud Dezandee
13 *
14 * Authors:
15 * Arnaud Dezandee <dezandee.arnaud@gmail.com>
16 */
17
18/**
19 * Dependencies
20 */
21
22var _path = require('path');
23
24var _path2 = _interopRequireDefault(_path);
25
26var _debug = require('debug');
27
28var _debug2 = _interopRequireDefault(_debug);
29
30var _utilArity = require('util-arity');
31
32var _utilArity2 = _interopRequireDefault(_utilArity);
33
34var _bluebird = require('bluebird');
35
36var _bluebird2 = _interopRequireDefault(_bluebird);
37
38var _immutable = require('immutable');
39
40var _immutable2 = _interopRequireDefault(_immutable);
41
42var _lodash = require('lodash.defaultsdeep');
43
44var _lodash2 = _interopRequireDefault(_lodash);
45
46var _package = require('../package.json');
47
48var _package2 = _interopRequireDefault(_package);
49
50var _step = require('./step.js');
51
52var _step2 = _interopRequireDefault(_step);
53
54var _driver = require('./driver.js');
55
56var _driver2 = _interopRequireDefault(_driver);
57
58var _index = require('./step_definitions/index.js');
59
60var _index2 = _interopRequireDefault(_index);
61
62function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
63
64function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
65
66/**
67 * Private
68 */
69
70var debug = (0, _debug2.default)('mink');
71
72var DEFAULT_PARAMS = {
73 driver: {
74 viewportSize: {
75 width: 1366,
76 height: 768
77 },
78 baseUrl: process.env.BASE_URL,
79 desiredCapabilities: {
80 browserName: 'firefox'
81 },
82 logLevel: 'silent',
83 port: 4444
84 }
85};
86
87function noop() {}
88// No operation performed.
89
90
91/**
92 * Public
93 */
94
95var Mink = function () {
96 function Mink() {
97 _classCallCheck(this, Mink);
98
99 this.steps = _immutable2.default.Map();
100
101 this.parameters = null;
102 this.cucumber = null;
103 this.driver = null;
104 }
105
106 /**
107 * Mink initialization method and entry point
108 *
109 * @param {Object} cucumber cucumber-js context
110 * @param {Object} parameters
111 * @returns {void}
112 */
113
114
115 _createClass(Mink, [{
116 key: 'init',
117 value: function init(cucumber) {
118 var _this = this;
119
120 var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
121
122 debug('init', params);
123
124 var parameters = (0, _lodash2.default)(params, DEFAULT_PARAMS);
125 var driver = new _driver2.default(parameters.driver);
126
127 this.parameters = parameters;
128 this.cucumber = cucumber;
129 this.driver = driver;
130
131 this.registerHooks(cucumber, driver);
132
133 _index2.default.forEach(function (_ref) {
134 var _ref2 = _slicedToArray(_ref, 2);
135
136 var pattern = _ref2[0];
137 var fn = _ref2[1];
138
139 _this.defineStep(pattern, fn);
140 });
141 }
142
143 /**
144 * Define a new step inside Mink-Cucumber context for use in .features files.
145 *
146 * @param {RegExp} pattern step regex
147 * @param {Function} fn step function
148 * @returns {Step}
149 */
150
151 }, {
152 key: 'defineStep',
153 value: function defineStep(pattern, fn) {
154 var _this2 = this;
155
156 debug('defineStep', pattern);
157
158 if (!this.steps.has(pattern)) {
159 this.steps = this.steps.set(pattern, new _step2.default(pattern, fn));
160
161 if (this.cucumber) {
162 var wrappedFn = (0, _utilArity2.default)(fn.length, function () {
163 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
164 args[_key] = arguments[_key];
165 }
166
167 return _bluebird2.default.try(function () {
168 return fn.apply(_this2, args);
169 });
170 });
171 this.cucumber.defineStep(pattern, wrappedFn);
172 }
173 }
174
175 return this.steps.get(pattern);
176 }
177
178 /**
179 * Search for a matching registered step.
180 *
181 * @param {String} line
182 * @returns {Step}
183 */
184
185 }, {
186 key: 'findStep',
187 value: function findStep(line) {
188 debug('findStep', line);
189
190 var step = this.steps.find(function (s) {
191 return !!s.match(line);
192 });
193 if (!step) throw new Error('Could not findStep with line "' + line + '"');
194
195 return step;
196 }
197
198 /**
199 * @param {String} input line
200 * @returns {Promise}
201 */
202
203 }, {
204 key: 'runStep',
205 value: function runStep(line) {
206 var cb = arguments.length <= 1 || arguments[1] === undefined ? noop : arguments[1];
207
208 debug('runStep', line);
209
210 var step = this.findStep(line);
211 return step.runWith(this, line, cb);
212 }
213
214 /**
215 * @param {Array} lines
216 * @returns {Promise}
217 */
218
219 }, {
220 key: 'manyStep',
221 value: function manyStep(lines) {
222 var _this3 = this;
223
224 var cb = arguments.length <= 1 || arguments[1] === undefined ? noop : arguments[1];
225
226 debug('manyStep', lines.join(', ').substr(0, 80));
227
228 return _bluebird2.default.each(lines, function (line) {
229 return _this3.runStep(line);
230 }).asCallback(cb);
231 }
232
233 /**
234 * @param {Array<Step>}
235 * @returns {Promise}
236 */
237
238 }, {
239 key: 'metaStep',
240 value: function metaStep(steps) {
241 var _this4 = this;
242
243 var cb = arguments.length <= 1 || arguments[1] === undefined ? noop : arguments[1];
244
245 debug('metaStep', steps);
246
247 return _bluebird2.default.each(steps, function (step) {
248 return step.runWith(_this4);
249 }).asCallback(cb);
250 }
251
252 /**
253 * Register mink driver hooks on cucumber context
254 *
255 * @param {Object} Cucumber cucumber-js context
256 * @param {Object} DriverInstance mink driver instance
257 * @returns {void}
258 */
259
260 }, {
261 key: 'registerHooks',
262 value: function registerHooks(cucumber, driver) {
263 cucumber.registerHandler('BeforeFeatures', function (event, done) {
264 return driver.init().then(function () {
265 return driver.setViewportSize(driver.parameters.viewportSize);
266 }).then(function () {
267 return done();
268 }).catch(function (error) {
269 return console.error(error);
270 });
271 });
272
273 cucumber.registerHandler('AfterFeatures', function (event, done) {
274 return driver.end().then(function () {
275 return done();
276 }).catch(function (error) {
277 return console.error(error);
278 });
279 });
280
281 if (driver.parameters.screenshotPath) {
282 cucumber.After(function (event) {
283 if (!event.isFailed()) return null;
284
285 var fileName = [event.getName() || 'Error', ':', event.getLine(), '.png'].join('');
286 var filePath = _path2.default.join(driver.parameters.screenshotPath, fileName);
287 return driver.saveScreenshot(filePath);
288 });
289 }
290 }
291 }]);
292
293 return Mink;
294}();
295
296// Aliases
297
298
299Mink.prototype.Given = Mink.prototype.defineStep;
300Mink.prototype.Then = Mink.prototype.defineStep;
301Mink.prototype.When = Mink.prototype.defineStep;
302Mink.prototype.DEFAULT_PARAMS = DEFAULT_PARAMS;
303Mink.prototype.VERSION = _package2.default.version;
304
305/**
306 * Interface
307 */
308
309exports.default = new Mink();
310module.exports = exports['default'];
\No newline at end of file