ForgeTotal.js 5
de

Total.js 5

Die Anwendung mit dem eingebauten Test-Runner testen

Total.js 5 · total5@0.0.19 testingci Mit Total.js 5 ausgeführt

Total.js hat einen kleinen Test-Runner, total5/test. Eine Testdatei ist ein normales Total.js-Skript: Sie lädt das Framework und den Runner, startet die Anwendung und registriert ihre Tests, sobald sie ready ist. Test.push(name, fn) fügt einen Test hinzu; fn(next) erledigt seine Arbeit und ruft next() auf, um mit dem folgenden fortzufahren. Test.print(message, error) meldet eine Prüfung: Übergib null als error für Erfolg ([OK] wird ausgegeben) oder eine Meldung für einen Fehlschlag ([FAIL] wird ausgegeben und der Prozess endet mit Code 1). Test.run() führt die registrierten Tests der Reihe nach aus und endet am Schluss mit Code 0.

Weil ein Fehlschlag den Prozess mit einem Code ungleich null beendet, kann die Datei von npm test und von jedem CI-Dienst aufgerufen werden. Warte nach ready einen Moment (etwa 500 ms) vor der ersten Anfrage: Eine sofort gesendete Anfrage kann noch ein 404 erhalten. Verwende RESTBuilder (oder REQUEST) gegen den lokalen Server, um Routen zu testen, und rufe Actions direkt mit ACTION() auf.

controllers/sum.js
exports.install = function() {
	ROUTE('GET /sum/{a}/{b}/', sum);
	ROUTE('GET /dir/', dir);
};

function sum($) {
	$.json({ total: +$.params.a + +$.params.b });
}

function dir($) {
	$.json({ dir: PATH.root() });
}
test.js
require('total5');
require('total5/test');

// Another port than the application uses, so both can run
Total.run({ port: 8765, release: false, watcher: false });

ON('ready', function() {

	// A request sent in the same tick as "ready" can still get a 404, so give the routes a moment
	setTimeout(runtests, 500);
});

function runtests() {

	Test.push('The sum route', function(next) {
		RESTBuilder.GET('http://127.0.0.1:8765/sum/2/3/').exec(function(err, response) {
			Test.print('2 + 3 = 5', response && response.total === 5 ? null : 'Expected 5, got ' + JSON.stringify(response));
			next();
		});
	});

	Test.push('Unknown route', function(next) {
		RESTBuilder.GET('http://127.0.0.1:8765/missing/').exec(function(err, response, output) {
			Test.print('/missing/ answers 404', output.status === 404 ? null : 'Expected 404, got ' + output.status);
			next();
		});
	});

	Test.run();
}