ForgeTotal.js 5
nl

Total.js 5

Test een Flow-component afzonderlijk met Flow.test()

Total.js 5 · total5@0.0.19 flowflowstreamcomponentstests Uitgevoerd met Total.js 5

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) (ook test.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 en data zijn 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) en test.fail(message) drukken [OK] of [NO] met de datum af, en een mislukking gooit een uitzondering. De functies zijn gewone eigenschappen: vervang test.ok en test.fail om het resultaat ergens anders heen te sturen, zoals het voorbeeld doet.
  • De teststroom heeft altijd het id test: slechts één Flow.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.

definitions/component-test.js
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);
	});
});
controllers/results.js
exports.install = function() {
	ROUTE('GET /results/', results);
};

function results($) {
	$.json(MAIN.results);
}