test: switch from PhantomJS to HeadlessChrome
Rework browser tests to run in Headless Chrome instead of PhantomJS, because the latter is no longer maintained. This allows us to remove transpilation to ES5 via babelify, which significantly improves speed of our tests. Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
This commit is contained in:
parent
9b1d4885ab
commit
cceb8a3c26
14
.travis.yml
14
.travis.yml
|
@ -5,18 +5,10 @@ node_js:
|
|||
- "10"
|
||||
- "12"
|
||||
|
||||
addons:
|
||||
chrome: stable
|
||||
|
||||
after_success: npm run coverage
|
||||
|
||||
# see https://www.npmjs.com/package/phantomjs-prebuilt#continuous-integration
|
||||
cache:
|
||||
directories:
|
||||
- travis_phantomjs
|
||||
before_install:
|
||||
- npm config set registry http://ci.strongloop.com:4873/
|
||||
# Upgrade PhantomJS to v2.1.1.
|
||||
- "export PHANTOMJS_VERSION=2.1.1"
|
||||
- "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH"
|
||||
- "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi"
|
||||
- "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then wget https://github.com/Medium/phantomjs/releases/download/v$PHANTOMJS_VERSION/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2; fi"
|
||||
- "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi"
|
||||
- "phantomjs --version"
|
||||
|
|
12
Gruntfile.js
12
Gruntfile.js
|
@ -31,11 +31,6 @@ module.exports = function(grunt) {
|
|||
},
|
||||
},
|
||||
},
|
||||
run: {
|
||||
optionalInstall: {
|
||||
exec: 'npm install --no-save --silent karma-phantomjs-launcher phantomjs-prebuilt',
|
||||
},
|
||||
},
|
||||
eslint: {
|
||||
gruntfile: {
|
||||
src: 'Gruntfile.js',
|
||||
|
@ -109,7 +104,7 @@ module.exports = function(grunt) {
|
|||
karma: {
|
||||
'unit-once': {
|
||||
configFile: 'test/karma.conf.js',
|
||||
browsers: ['PhantomJS'],
|
||||
browsers: ['ChromeHeadless'],
|
||||
singleRun: true,
|
||||
reporters: ['dots', 'junit'],
|
||||
|
||||
|
@ -216,7 +211,6 @@ module.exports = function(grunt) {
|
|||
});
|
||||
|
||||
// These plugins provide necessary tasks.
|
||||
grunt.loadNpmTasks('grunt-run');
|
||||
grunt.loadNpmTasks('grunt-browserify');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-eslint');
|
||||
|
@ -242,14 +236,12 @@ module.exports = function(grunt) {
|
|||
// Default task.
|
||||
grunt.registerTask('default', ['browserify']);
|
||||
|
||||
grunt.registerTask('phantomTests', ['run', 'karma:unit-once']);
|
||||
|
||||
grunt.registerTask('test', [
|
||||
'eslint',
|
||||
process.env.JENKINS_HOME ? 'mochaTest:unit-xml' : 'mochaTest:unit',
|
||||
process.env.JENKINS_HOME && (/^win/.test(process.platform) ||
|
||||
/^s390x/.test(process.arch) || /^ppc64/.test(process.arch)) ?
|
||||
'skip-karma' : 'phantomTests',
|
||||
'skip-karma' : 'karma:unit-once',
|
||||
]);
|
||||
|
||||
// alias for sl-ci-run and `npm test`
|
||||
|
|
|
@ -63,9 +63,7 @@
|
|||
"underscore.string": "^3.3.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-preset-es2015": "^6.22.0",
|
||||
"babelify": "^7.3.0",
|
||||
"browserify": "^13.1.0",
|
||||
"browserify": "^16.5.0",
|
||||
"chai": "^3.5.0",
|
||||
"cookie-parser": "^1.3.4",
|
||||
"coveralls": "^3.0.2",
|
||||
|
@ -82,7 +80,6 @@
|
|||
"grunt-eslint": "^21.0.0",
|
||||
"grunt-karma": "^3.0.2",
|
||||
"grunt-mocha-test": "^0.13.3",
|
||||
"grunt-run": "^0.8.1",
|
||||
"karma": "^4.1.0",
|
||||
"karma-browserify": "^6.0.0",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
|
|
|
@ -64,7 +64,6 @@ module.exports = function(config) {
|
|||
'karma-browserify',
|
||||
'karma-es6-shim',
|
||||
'karma-mocha',
|
||||
'karma-phantomjs-launcher',
|
||||
'karma-chrome-launcher',
|
||||
'karma-junit-reporter',
|
||||
],
|
||||
|
@ -104,27 +103,18 @@ module.exports = function(config) {
|
|||
'superagent',
|
||||
'supertest',
|
||||
],
|
||||
transform: [
|
||||
['babelify', {
|
||||
presets: [
|
||||
['es2015', {
|
||||
// Disable transform-es2015-modules-commonjs which adds
|
||||
// "use strict" to all files, even those that don't work
|
||||
// in strict mode
|
||||
// (e.g. chai, loopback-datasource-juggler, etc.)
|
||||
modules: false,
|
||||
}],
|
||||
],
|
||||
// By default, browserify does not transform node_modules
|
||||
// As a result, our dependencies like strong-remoting and juggler
|
||||
// are kept in original ES6 form that does not work in PhantomJS
|
||||
global: true,
|
||||
// Prevent SyntaxError in strong-task-emitter:
|
||||
// strong-task-emitter/lib/task.js (83:4):
|
||||
// arguments is a reserved word in strict mode
|
||||
ignore: /node_modules\/(strong-task-emitter)\//,
|
||||
}],
|
||||
],
|
||||
packageFilter: function(pkg, dir) {
|
||||
// async@3 (used e.g. by loopback-connector) is specifying custom
|
||||
// browserify config, in particular it wants to apply transformation
|
||||
// `babelify`. We don't have `babelify` installed because we are
|
||||
// testing using latest Chrome and thus don't need any transpilation.
|
||||
// Let's remove the browserify config from the package and force
|
||||
// browserify to use our config instead.
|
||||
if (pkg.name === 'async') {
|
||||
delete pkg.browserify;
|
||||
}
|
||||
return pkg;
|
||||
},
|
||||
debug: true,
|
||||
// noParse: ['jquery'],
|
||||
watch: true,
|
||||
|
|
Loading…
Reference in New Issue