Socket
Socket
Sign inDemoInstall

protractor-cucumber-framework

Package Overview
Dependencies
Maintainers
2
Versions
101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

protractor-cucumber-framework - npm Package Compare versions

Comparing version 0.2.5 to 0.3.0

lib/resultsCapturer.js

196

index.js
var q = require('q'),
assign = require('object-assign'),
path = require('path'),
glob = require('glob');
glob = require('glob'),
Cucumber = require('cucumber');

@@ -14,144 +14,82 @@ /**

exports.run = function(runner, specs) {
// TODO - add the event interface for cucumber.
var Cucumber = require('cucumber');
var configDir = runner.getConfig().configDir;
var results = {}
require('./lib/runState').initialize(runner, results);
// Set up exec options for Cucumber
var execOptions = assign({
format: [],
tags: [],
require: [],
compiler: []
}, runner.getConfig().cucumberOpts);
return runner.runTestPreparer().then(function() {
return q.promise(function(resolve, reject) {
var cliArguments = convertOptionsToCliArguments(runner.getConfig().cucumberOpts);
cliArguments.push('--require', path.resolve(__dirname, 'lib', 'resultsCapturer.js'));
cliArguments = cliArguments.concat(specs);
['compiler', 'format', 'tags', 'require'].forEach(function (option) {
// Make sure that options values are arrays
if (!Array.isArray(execOptions[option])) {
execOptions[option] = [ execOptions[option] ];
}
if (option === 'require') {
execOptions[option] =
execOptions[option].map(function(path) {
// Handle glob matching
return glob.sync(path, {cwd: configDir});
}).reduce(function(opts, globPaths) {
// Combine paths into flattened array
return opts.concat(globPaths);
}, []).map(function(requirePath) {
// Resolve require absolute path
return path.resolve(configDir, requirePath)
}).filter(function(item, pos, orig) {
// Make sure requires are unique
return orig.indexOf(item) == pos;
});
}
Cucumber.Cli(cliArguments).run(function (isSuccessful) {
try {
if (runner.getConfig().onComplete) {
runner.getConfig().onComplete();
}
resolve(results);
} catch (err) {
reject(err);
}
});
});
});
var testResult = [];
var stepResults = {
description: null,
assertions: [],
duration: 0
};
var scenarioFailed = false;
function convertOptionsToCliArguments(options) {
var cliArguments = ['node', 'cucumberjs'];
var failedCount = 0;
// Add a listener into cucumber so that protractor can find out which
// steps passed/failed
var addResultListener = function(formatter) {
var feature = { getName: function() { return ''; } };
var originalHandleBeforeFeatureEvent = formatter.handleBeforeFeatureEvent;
formatter.handleBeforeFeatureEvent = function(event, callback) {
feature = event.getPayloadItem('feature');
if (typeof originalHandleBeforeFeatureEvent == 'function') {
originalHandleBeforeFeatureEvent.apply(formatter, arguments);
for (var option in options) {
var cliArgumentValues = convertOptionValueToCliValues(option, options[option]);
if (cliArgumentValues.length) {
cliArgumentValues.forEach(function (value) {
cliArguments.push('--' + option, value);
});
} else {
callback();
cliArguments.push('--' + option);
}
};
var originalHandleAfterScenarioEvent = formatter.handleAfterScenarioEvent;
formatter.handleAfterScenarioEvent = function(event, callback) {
var scenarioInfo = {
name: event.getPayloadItem('scenario').getName(),
category: feature.getName()
};
stepResults.description = scenarioInfo.name;
if (scenarioFailed) {
++failedCount;
runner.emit('testFail', scenarioInfo);
} else {
runner.emit('testPass', scenarioInfo);
}
}
testResult.push(stepResults);
stepResults = {
description: null,
assertions: [],
duration: 0
};
scenarioFailed = false;
return cliArguments;
}
if (originalHandleAfterScenarioEvent
&& typeof(originalHandleAfterScenarioEvent) === 'function') {
originalHandleAfterScenarioEvent(event, callback);
} else {
callback();
}
};
function convertRequireOptionValuesToCliValues(values) {
var configDir = runner.getConfig().configDir;
var originalHandleStepResultEvent = formatter.handleStepResultEvent;
formatter.handleStepResultEvent = function(event, callback) {
var stepResult = event.getPayloadItem('stepResult');
var isStepFailed = stepResult.getStatus() === Cucumber.Status.FAILED;
var isStepSuccessful = stepResult.getStatus() === Cucumber.Status.PASSED;
return values.map(function(path) {
// Handle glob matching
return glob.sync(path, {cwd: configDir});
}).reduce(function(opts, globPaths) {
// Combine paths into flattened array
return opts.concat(globPaths);
}, []).map(function(requirePath) {
// Resolve require absolute path
return path.resolve(configDir, requirePath)
}).filter(function(item, pos, orig) {
// Make sure requires are unique
return orig.indexOf(item) == pos;
});
}
if (isStepSuccessful) {
stepResults.assertions.push({
passed: true
});
stepResults.duration += stepResult.getDuration();
} else if (isStepFailed) {
scenarioFailed = true;
var failureMessage = stepResult.getFailureException();
stepResults.assertions.push({
passed: false,
errorMsg: failureMessage.message,
stackTrace: failureMessage.stack
});
stepResults.duration += stepResult.getDuration();
function convertGenericOptionValuesToCliValues(values) {
return values.reduce(function (opts, value) {
if (value !== true) {
opts.push(value);
}
if (originalHandleStepResultEvent
&& typeof(originalHandleStepResultEvent) === 'function') {
originalHandleStepResultEvent(event, callback);
} else {
callback();
}
};
};
return opts;
}, []);
}
return runner.runTestPreparer().then(function() {
return q.promise(function(resolve, reject) {
var cucumberConf = Cucumber.Cli.Configuration(execOptions, specs);
var runtime = Cucumber.Runtime(cucumberConf);
var formatters = cucumberConf.getFormatters();
function convertOptionValueToCliValues(option, values) {
if (!Array.isArray(values)) {
values = [values];
}
addResultListener(formatters[0]);
formatters.forEach(runtime.attachListener.bind(runtime));
runtime.start(function() {
try {
if (runner.getConfig().onComplete) {
runner.getConfig().onComplete();
}
resolve({
failedCount: failedCount,
specResults: testResult
});
} catch (err) {
reject(err);
}
});
});
});
if (option === 'require') {
return convertRequireOptionValuesToCliValues(values);
} else {
return convertGenericOptionValuesToCliValues(values);
}
}
};
{
"name": "protractor-cucumber-framework",
"version": "0.2.5",
"version": "0.3.0",
"description": "Protractor framework for Cucumber.js",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -33,1 +33,22 @@ Protractor Cucumber Framework

Pull requests are welcome. Commits should have an appropriate message and be squashed.
For Contributors
----------------
Clone the github repository:
git clone https://github.com/mattfritz/protractor-cucumber-framework
cd protractor-cucumber-framework
npm install
Start up a selenium server. By default, the tests expect the selenium server to be running at `http://localhost:4444/wd/hub`. A selenium server can be started with `webdriver-manager`.
node_modules/.bin/webdriver-manager update --standalone
node_modules/.bin/webdriver-manager start
The test suite runs against the included test application. Start that up with
npm start
Then run the tests with
npm test
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc