ForgeTotal.js 5
el

Total.js 5

Δοκιμάστε μια συνιστώσα Flow μόνη της με το Flow.test()

Total.js 5 · total5@0.0.19 flowflowstreamcomponentstests Εκτελέστηκε με το Total.js 5

Το Flow.test(name, source, [config], [init]) φτιάχνει μια ροή με μία συνιστώσα (το source είναι ο κώδικάς της, όπως στη συνταγή του FlowStream, και το config αντικαθιστά τη ρύθμισή της) και μια εικονική συνιστώσα που συλλέγει τις εξόδους της. Το init(test) καλείται όταν η ροή είναι έτοιμη, με το αντικείμενο test:

  • Το test.send(inputid, data) (επίσης test.input) στέλνει ένα μήνυμα σε μια είσοδο της συνιστώσας και το επιστρέφει.
  • test.message = function($, data): καλείται με κάθε μήνυμα που στέλνει η συνιστώσα σε οποιαδήποτε από τις εξόδους της· το $ είναι το μήνυμα και το data τα δεδομένα του.
  • Το test.reconfigure(config) αλλάζει τη ρύθμιση· το test.configure = function(config) καλείται μετά. Το test.variables(object) ορίζει τις μεταβλητές της ροής.
  • Τα test.assert(ok, message), test.ok(message) και test.fail(message) τυπώνουν [OK] ή [NO] με την ημερομηνία και μια αποτυχία πετά εξαίρεση. Οι συναρτήσεις είναι απλές ιδιότητες: αντικαταστήστε τα test.ok και test.fail για να στείλετε το αποτέλεσμα αλλού, όπως κάνει το παράδειγμα.
  • Η ροή δοκιμής έχει πάντα το id test: μόνο ένα Flow.test() τη φορά.

Προορίζεται για τις δοκιμές μιας συνιστώσας που γράφτηκε για ένα Flow, εκτελούμενες με node index.js σε μια μικρή δική τους εφαρμογή.

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);
}