Egy Flow-komponens önálló tesztelése a Flow.test()-tel
A Flow.test(name, source, [config], [init]) egy egyetlen komponenst tartalmazó folyamatot épít (a source a komponens kódja, mint a FlowStream receptjében, a config pedig lecseréli a konfigurációját), valamint egy próbakomponenst, amely összegyűjti a kimeneteit. Az init(test) akkor hívódik meg, amikor a folyamat kész, a test objektummal:
- A
test.send(inputid, data)(és atest.input) üzenetet küld a komponens egy bemenetére, és visszaadja azt. test.message = function($, data): minden olyan üzenettel meghívódik, amelyet a komponens bármelyik kimenetére küld; a$az üzenet, adatapedig az adata.- A
test.reconfigure(config)megváltoztatja a konfigurációt; atest.configure = function(config)ezután hívódik meg. Atest.variables(object)beállítja a folyamat változóit. - A
test.assert(ok, message), atest.ok(message)és atest.fail(message)[OK]vagy[NO]jelzést ír ki dátummal, a hiba pedig kivételt dob. A függvények egyszerű tulajdonságok: cserélje le atest.okés atest.failértékét, hogy az eredményt máshová küldje, ahogy a példa is teszi. - A tesztfolyamat azonosítója mindig
test: egyszerre csak egyFlow.test().
Egy Flow-hoz írt komponens tesztjeire szolgál, a node index.js paranccsal futtatva egy kis saját alkalmazásban.
MAIN.results = [];
const source = `<script total>
exports.id = 'tax';
exports.name = 'Tax';
exports.inputs = [{ id: 'input', name: 'Input' }];
exports.outputs = [{ id: 'output', name: 'Output' }];
exports.config = { rate: 21 };
exports.make = function(instance, config) {
instance.message = function($) {
$.send('output', { net: $.data, total: Math.round($.data * (100 + config.rate)) / 100 });
};
};
</script>`;
ON('ready', function() {
Flow.test('tax', source, { rate: 10 }, function(test) {
test.ok = message => MAIN.results.push('ok: ' + message);
test.fail = message => MAIN.results.push('no: ' + message);
test.message = function($, data) {
test.assert(data.net === 100, 'the net amount comes back');
test.assert(data.total === 110, 'the configuration of the test (10 %) is used, got ' + data.total);
MAIN.results.push('message: ' + JSON.stringify(data));
};
test.send('input', 100);
});
});exports.install = function() {
ROUTE('GET /results/', results);
};
function results($) {
$.json(MAIN.results);
}