angular-cn/public/docs/_examples/protractor.config.js

171 lines
4.4 KiB
JavaScript

// TO RUN THE TESTS
//
// The first time, run:
// ./node_modules/.bin/webdriver-manager update
// Make sure the test server is running. Then do.
// ./node_modules/.bin/protractor protractor.config.js
var fs = require('fs');
var path = require('canonical-path');
exports.config = {
directConnect: true,
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'
},
// Framework to use. Jasmine is recommended.
framework: 'jasmine',
// Spec patterns are relative to this config file
specs: ['**/*e2e-spec.js' ],
// For angular2 tests
useAllAngular2AppRoots: true,
baseUrl: 'http://localhost:8080',
// doesn't seem to work.
// resultJsonOutputFile: "foo.json",
onPrepare: function() {
// SpecReporter
//var SpecReporter = require('jasmine-spec-reporter');
//// add jasmine spec reporter
//jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: 'none'}));
// jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: 'all'}));
// debugging
console.log('browser.params:' + JSON.stringify(browser.params));
var appDir = browser.params.appDir;
if (appDir) {
if (appDir.match('/ts') != null) {
browser.appIsTs = true;
} else if (appDir.match('/js') != null) {
browser.appIsJs = true;
} else if (appDir.match('/dart') != null) {
browser.appIsDart = true;
} else {
browser.appIsUnknown = true;
}
} else {
browser.appIsUnknown = true;
}
jasmine.getEnv().addReporter(new Reporter( browser.params )) ;
global.describeIf = describeIf;
global.itIf = itIf;
global.sendKeys = sendKeys;
},
jasmineNodeOpts: {
// defaultTimeoutInterval: 60000,
defaultTimeoutInterval: 10000,
showTiming: true,
print: function() {}
}
};
function describeIf(cond, name, func) {
if (cond) {
describe(name, func);
} else {
xdescribe('*** Skipped *** - ' + name, func);
}
}
function itIf(cond, name, func) {
if (cond) {
it(name, func);
} else {
xit('*** Skipped *** - ' + name, func);
}
}
// Hack - because of bug with send keys
function sendKeys(element, str) {
return str.split('').reduce(function (promise, char) {
return promise.then(function () {
return element.sendKeys(char);
});
}, element.getAttribute('value'));
// better to create a resolved promise here but ... don't know how with protractor;
}
function Reporter(options) {
this.defaultOutputFile = path.resolve(process.cwd(), "../../", 'protractor-results.txt');
var _output = [];
var _logDepth = 0;
var __pad = ' ';
var _currentSuite;
options.outputFile = options.outputFile || this.defaultOutputFile;
log('AppDir: ' + options.appDir);
this.suiteStarted = function(suite) {
_logDepth++;
log('Suite: ' + suite.description);
// debugging info
// log('Suite stringify:' + JSON.stringify(suite));
// log('argv stringify:' + JSON.stringify(process.argv));
_currentSuite = suite;
_currentSuite.ok = true;
};
this.suiteDone = function(suite) {
var status = _currentSuite.ok ? 'Suite passed: ' : 'Suite failed: ';
log(status + suite.description);
_logDepth--;
};
this.specStarted = function(spec) {
_logDepth++;
};
this.specDone = function(spec) {
log(spec.status + ": " + spec.description);
logFailedSpec(spec);
_logDepth--;
};
this.jasmineDone = function() {
outputFile = options.outputFile;
// console.log('Completed - appending output to: ' + outputFile);
fs.appendFileSync(outputFile, _output.join('\n')+ '\n\n');
};
function logFailedSpec(spec) {
if (spec.failedExpectations.length == 0) return;
_logDepth++;
spec.failedExpectations.forEach(function(exp) {
log('detail: ' + exp.message);
_currentSuite.ok = false;
});
_logDepth--;
}
function log(msg) {
msg = lpad(msg, 3 * _logDepth);
console.log(msg);
_output.push(msg);
}
function lpad(value, length) {
return __pad.substr(0,length) + value;
}
};
// To be copied into e2e-tests experiencing sendKeys bug.
//// Hack - because of bug with send keys
//function sendKeys(element, str) {
// return str.split('').reduce(function (promise, char) {
// return promise.then(function () {
// return element.sendKeys(char);
// });
// }, element.getAttribute('value'));
// // better to create a resolved promise here but ... don't know how with protractor;
//}