Se vuoi eseguire test automatici utilizzando Chrome Headless, non devi cercare oltre. In questo articolo scoprirai come iniziare a usare Karma come runner e Mocha+Chai per i test di authoring.
Che cosa sono?
Karma, mocha, chai, headless Chrome, oh wow!
Karma è un sistema di test compatibile con tutti i framework di test più diffusi (Jasmine, Mocha, QUnit).
Chai è una libreria di asserzioni che funziona con Node e nel browser. Abbiamo bisogno di quest'ultimo.
Headless Chrome è un modo per eseguire il browser Chrome in un ambiente headless senza l'interfaccia utente completa del browser. Uno dei vantaggi dell'utilizzo di Chrome headless (rispetto al test diretto in Node) è che i test JavaScript verranno eseguiti nello stesso ambiente degli utenti del tuo sito. Chrome headless ti offre un contesto reale del browser senza il sovraccarico di memoria associato all'esecuzione di una versione completa di Chrome.
Configurazione
Installazione
Installa Karma, i plug-in pertinenti e i runner dei test utilizzando yarn
:
yarn add --dev karma karma-chrome-launcher karma-mocha karma-chai
yarn add --dev mocha chai
oppure utilizza npm
:
npm i --save-dev karma karma-chrome-launcher karma-mocha karma-chai
npm i --save-dev mocha chai
In questo post sto usando Mocha e Chai, ma se non ti piace fan, scegli la tua libreria di asserzioni preferita che funzioni nel browser.
Configurare Karma
Crea un file karma.conf.js
che utilizzi il programma di avvio ChromeHeadless
.
karma.conf.js
module.exports = function(config) {
config.set({
frameworks: ['mocha', 'chai'],
files: ['test/**/*.js'],
reporters: ['progress'],
port: 9876, // karma web server port
colors: true,
logLevel: config.LOG_INFO,
browsers: ['ChromeHeadless'],
autoWatch: false,
// singleRun: false, // Karma captures browsers, runs the tests and exits
concurrency: Infinity
})
}
Scrivi un test
Crea un test in /test/test.js
.
/test/test.js
describe('Array', () => {
describe('#indexOf()', () => {
it('should return -1 when the value is not present', () => {
assert.equal(-1, [1,2,3].indexOf(4));
});
});
});
Esegui i test
Aggiungi uno script test
in package.json
che esegua Karma con le nostre impostazioni.
package.json
"scripts": {
"test": "karma start --single-run --browsers ChromeHeadless karma.conf.js"
}
Quando esegui i test (yarn test
), Chrome headless dovrebbe avviarsi e stampare i risultati nel terminale:
Creare un proprio programma di avvio di Headless Chrome
Il programma di avvio ChromeHeadless
è fantastico perché funziona immediatamente per i test su Headless Chrome. Include i flag di Chrome appropriati per te e avvia una versione di Chrome per il debug remoto sulla porta 9222
.
Tuttavia, a volte potresti voler passare flag personalizzati a Chrome o modificare la porta di debug remoto utilizzata dal programma di avvio. A tale scopo, crea un campo customLaunchers
che espanda il comando ChromeHeadless
di avvio base:
karma.conf.js
module.exports = function(config) {
...
config.set({
browsers: ['Chrome', 'ChromeHeadless', 'MyHeadlessChrome'],
customLaunchers: {
MyHeadlessChrome: {
base: 'ChromeHeadless',
flags: ['--disable-translate', '--disable-extensions', '--remote-debugging-port=9223']
}
},
}
};
Eseguire tutto su Travis CI
La parte difficile è configurare Karma per eseguire i test in Chrome Headless. L'integrazione continua in Travis è a portata di mano.
Per eseguire i test in Travis, utilizza dist: trusty
e installa il componente aggiuntivo stabile di Chrome:
.travis.yml
language: node_js
node_js:
- "7"
dist: trusty # needs Ubuntu Trusty
# Note: if you switch to sudo: false, you'll need to launch Chrome with --no-sandbox.
# See https://github.com/travis-ci/travis-ci/issues/8836
sudo: required
addons:
chrome: stable # have Travis install Chrome stable.
cache:
yarn: true
directories:
- node_modules
install:
- yarn
script:
- yarn test