Test een Flow-component afzonderlijk met Flow.test()
Flow.test(name, source, [config], [init]) bouwt een stroom met één component (de source is zijn code, zoals in het recept van FlowStream, en config vervangt zijn configuratie) en een dummycomponent die zijn uitgangen verzamelt. init(test) wordt aangeroepen als de stroom klaar is, met het object test:
test.send(inputid, data)(ooktest.input) stuurt een bericht naar een ingang van de component en geeft het terug.test.message = function($, data): wordt aangeroepen met elk bericht dat de component naar een van zijn uitgangen stuurt;$is het bericht endatazijn gegevens.test.reconfigure(config)wijzigt de configuratie;test.configure = function(config)wordt daarna aangeroepen.test.variables(object)stelt de variabelen van de stroom in.test.assert(ok, message),test.ok(message)entest.fail(message)drukken[OK]of[NO]met de datum af, en een mislukking gooit een uitzondering. De functies zijn gewone eigenschappen: vervangtest.okentest.failom het resultaat ergens anders heen te sturen, zoals het voorbeeld doet.- De teststroom heeft altijd het id
test: slechts éénFlow.test()tegelijk.
Het is bedoeld voor de tests van een component die voor een Flow is geschreven, uitgevoerd met node index.js in een kleine eigen applicatie.
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);
}