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:
Miroslav Bajtoš 2019-09-30 09:14:35 +02:00
parent 9b1d4885ab
commit cceb8a3c26
No known key found for this signature in database
GPG Key ID: 6F2304BA9361C7E3
4 changed files with 18 additions and 47 deletions

View File

@ -5,18 +5,10 @@ node_js:
- "10" - "10"
- "12" - "12"
addons:
chrome: stable
after_success: npm run coverage after_success: npm run coverage
# see https://www.npmjs.com/package/phantomjs-prebuilt#continuous-integration
cache:
directories:
- travis_phantomjs
before_install: before_install:
- npm config set registry http://ci.strongloop.com:4873/ - 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"

View File

@ -31,11 +31,6 @@ module.exports = function(grunt) {
}, },
}, },
}, },
run: {
optionalInstall: {
exec: 'npm install --no-save --silent karma-phantomjs-launcher phantomjs-prebuilt',
},
},
eslint: { eslint: {
gruntfile: { gruntfile: {
src: 'Gruntfile.js', src: 'Gruntfile.js',
@ -109,7 +104,7 @@ module.exports = function(grunt) {
karma: { karma: {
'unit-once': { 'unit-once': {
configFile: 'test/karma.conf.js', configFile: 'test/karma.conf.js',
browsers: ['PhantomJS'], browsers: ['ChromeHeadless'],
singleRun: true, singleRun: true,
reporters: ['dots', 'junit'], reporters: ['dots', 'junit'],
@ -216,7 +211,6 @@ module.exports = function(grunt) {
}); });
// These plugins provide necessary tasks. // These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-run');
grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-browserify');
grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-eslint'); grunt.loadNpmTasks('grunt-eslint');
@ -242,14 +236,12 @@ module.exports = function(grunt) {
// Default task. // Default task.
grunt.registerTask('default', ['browserify']); grunt.registerTask('default', ['browserify']);
grunt.registerTask('phantomTests', ['run', 'karma:unit-once']);
grunt.registerTask('test', [ grunt.registerTask('test', [
'eslint', 'eslint',
process.env.JENKINS_HOME ? 'mochaTest:unit-xml' : 'mochaTest:unit', process.env.JENKINS_HOME ? 'mochaTest:unit-xml' : 'mochaTest:unit',
process.env.JENKINS_HOME && (/^win/.test(process.platform) || process.env.JENKINS_HOME && (/^win/.test(process.platform) ||
/^s390x/.test(process.arch) || /^ppc64/.test(process.arch)) ? /^s390x/.test(process.arch) || /^ppc64/.test(process.arch)) ?
'skip-karma' : 'phantomTests', 'skip-karma' : 'karma:unit-once',
]); ]);
// alias for sl-ci-run and `npm test` // alias for sl-ci-run and `npm test`

View File

@ -63,9 +63,7 @@
"underscore.string": "^3.3.5" "underscore.string": "^3.3.5"
}, },
"devDependencies": { "devDependencies": {
"babel-preset-es2015": "^6.22.0", "browserify": "^16.5.0",
"babelify": "^7.3.0",
"browserify": "^13.1.0",
"chai": "^3.5.0", "chai": "^3.5.0",
"cookie-parser": "^1.3.4", "cookie-parser": "^1.3.4",
"coveralls": "^3.0.2", "coveralls": "^3.0.2",
@ -82,7 +80,6 @@
"grunt-eslint": "^21.0.0", "grunt-eslint": "^21.0.0",
"grunt-karma": "^3.0.2", "grunt-karma": "^3.0.2",
"grunt-mocha-test": "^0.13.3", "grunt-mocha-test": "^0.13.3",
"grunt-run": "^0.8.1",
"karma": "^4.1.0", "karma": "^4.1.0",
"karma-browserify": "^6.0.0", "karma-browserify": "^6.0.0",
"karma-chrome-launcher": "^2.2.0", "karma-chrome-launcher": "^2.2.0",

View File

@ -64,7 +64,6 @@ module.exports = function(config) {
'karma-browserify', 'karma-browserify',
'karma-es6-shim', 'karma-es6-shim',
'karma-mocha', 'karma-mocha',
'karma-phantomjs-launcher',
'karma-chrome-launcher', 'karma-chrome-launcher',
'karma-junit-reporter', 'karma-junit-reporter',
], ],
@ -104,27 +103,18 @@ module.exports = function(config) {
'superagent', 'superagent',
'supertest', 'supertest',
], ],
transform: [ packageFilter: function(pkg, dir) {
['babelify', { // async@3 (used e.g. by loopback-connector) is specifying custom
presets: [ // browserify config, in particular it wants to apply transformation
['es2015', { // `babelify`. We don't have `babelify` installed because we are
// Disable transform-es2015-modules-commonjs which adds // testing using latest Chrome and thus don't need any transpilation.
// "use strict" to all files, even those that don't work // Let's remove the browserify config from the package and force
// in strict mode // browserify to use our config instead.
// (e.g. chai, loopback-datasource-juggler, etc.) if (pkg.name === 'async') {
modules: false, delete pkg.browserify;
}], }
], return pkg;
// 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)\//,
}],
],
debug: true, debug: true,
// noParse: ['jquery'], // noParse: ['jquery'],
watch: true, watch: true,