Wenn Sie automatisierte Tests mit Headless Chrome durchführen möchten, sind Sie hier richtig. In diesem Artikel erfahren Sie, wie Sie Karma als Runner und Mocha + Chai zum Erstellen von Tests einrichten.
Worum geht es?
Karma, Mocha, Chai, Headless Chrome – oh mein Gott!
Karma ist ein Test-Harness, das mit allen gängigen Test-Frameworks funktioniert (Jasmine, Mocha, QUnit).
Chai ist eine Assertion-Bibliothek, die mit Node und im Browser funktioniert. Wir brauchen Letzteres.
Mit Headless Chrome können Sie den Chrome-Browser in einer monitorlosen Umgebung ohne die vollständige Browser-UI ausführen. Einer der Vorteile von Headless Chrome (im Vergleich zu direkten Tests in Node) besteht darin, dass Ihre JavaScript-Tests in derselben Umgebung wie Nutzer Ihrer Website ausgeführt werden. Mit monitorlosem Chrome erhalten Sie einen echten Browserkontext, ohne den Arbeitsspeicher-Aufwand für eine Vollversion von Chrome.
Einrichtung
Installation
Installieren Sie Karma, die relevanten Plug-ins und die Testläufer mit yarn
:
yarn add --dev karma karma-chrome-launcher karma-mocha karma-chai
yarn add --dev mocha chai
oder npm
verwenden:
npm i --save-dev karma karma-chrome-launcher karma-mocha karma-chai
npm i --save-dev mocha chai
Ich verwende in diesem Beitrag Mocha und Chai. Wenn Sie aber kein Fan sind, wählen Sie Ihre bevorzugte Assertion-Bibliothek aus, die im Browser funktioniert.
Karma konfigurieren
Erstellen Sie eine karma.conf.js
-Datei, die den ChromeHeadless
-Launcher verwendet.
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
})
}
Test schreiben
Erstellen Sie einen 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));
});
});
});
Tests ausführen
Fügen Sie in package.json
ein test
-Skript hinzu, das Karma mit unseren Einstellungen ausführt.
package.json
"scripts": {
"test": "karma start --single-run --browsers ChromeHeadless karma.conf.js"
}
Wenn Sie Ihre Tests ausführen (yarn test
), sollte Headless Chrome gestartet werden und die Ergebnisse im Terminal ausgeben:
Eigenen Headless Chrome-Launcher erstellen
Der ChromeHeadless
-Launcher ist sehr gut geeignet, weil er für Tests mit monitorlosem Chrome sofort einsatzbereit ist. Es enthält die entsprechenden Chrome-Flags und startet eine Remote-Debugging-Version von Chrome auf Port 9222
.
Manchmal möchten Sie jedoch benutzerdefinierte Flags an Chrome übergeben oder den Remote-Debugging-Port ändern, den der Launcher verwendet. Dazu erstellen Sie ein customLaunchers
-Feld, das den Basis-ChromeHeadless
-Launcher erweitert:
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']
}
},
}
};
Alles auf Travis CI ausführen
Der schwierige Teil besteht darin, Karma für die Tests in Headless Chrome zu konfigurieren. Continuous Integration in Travis ist nur ein paar Zeilen entfernt.
Wenn Sie Ihre Tests in Travis ausführen möchten, verwenden Sie dist: trusty
und installieren Sie das stabile Chrome-Add-on:
.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