Testing
Um verschiedene Tests für den eigenen ioBroker-Adapter vorzubereiten, gibt es das Paket @iobroker/testing. Auf der GitHub-Seite sind einige Beispiele vorhanden.
Dabei werden folgende Typen unterschieden:
Package-Tests prüfen, ob das Paket den generellen Anforderungen vom ioBroker-Team entspricht (ähnlich Adapter-Checker)
JavaScript-Tests (laufen ohne einen
js-controller
) und arbeiten mit MocksIntegration-Tests arbeiten mit einer
js-controller
-Instanz, welche automatisch gestartet / verwaltet wird
Package-Tests
Diese Tests führen Prüfungen der package.json
und der io-package.json
durch. Datei test/package.js
:
const path = require('path');
const { tests } = require('@iobroker/testing');
// Validate the package files
tests.packageFiles(path.join(__dirname, '..'));
JavaScript-Tests
Um Tests von einzelnen Dateien oder Klassen auszuführen, eigenen sich JavaScript-Tests, welche Mocha bzw. Chai Tests ausführen. Dabei wir eine zweite JavaScript-Datei neben die zu testende Datei gelegt, welche durch ein Namensschema automatisch als Test erkannt wird. Beispiel:
lib/convert.js
lib/convert.test.js
Ein Test sieht dabei wie folgt aus:
const expect = require('chai').expect;
const converter = require('../lib/converter');
describe('Test conversions', function () {
it('Test celsiusToFahrenheit', function () {
expect(converter.celsiusToFahrenheit(15)).to.be.equal(59);
expect(converter.celsiusToFahrenheit(0)).to.be.equal(32);
expect(converter.celsiusToFahrenheit(100)).to.be.equal(212);
expect(converter.celsiusToFahrenheit(-20)).to.be.equal(-4);
});
it('Test intToHex', function () {
expect(converter.intToHex(0)).to.be.equal('00');
expect(converter.intToHex(1)).to.be.equal('01');
expect(converter.intToHex(15)).to.be.equal('0F');
expect(converter.intToHex(255)).to.be.equal('FF');
});
});
Integration-Tests
Tests lokal ausführen
Um alle Tests lokal auszuführen, können diese über npm angestoßen werden.
npm run test:js
npm run test:integration
npm run test:package
Damit diese Befehle funktionieren, muss die package.json
des Adapters entsprechende Einträge enthalten:
"scripts": {
"test:js": "mocha --config test/mocharc.custom.json \"{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js}\"",
"test:package": "mocha test/package --exit",
"test:integration": "mocha test/integration --exit",
"test": "npm run test:js && npm run test:package"
}