Tester l'application avec le lanceur de tests intégré
Total.js possède un petit lanceur de tests, total5/test. Un fichier de test est un script Total.js ordinaire : il charge le framework et le lanceur, démarre l'application et, lorsqu'elle est ready, enregistre ses tests. Test.push(name, fn) ajoute un test ; fn(next) fait son travail et appelle next() pour passer au suivant. Test.print(message, error) signale une vérification : passez null comme error pour un succès ([OK] est affiché) ou un message pour un échec ([FAIL] est affiché et le processus se termine avec le code 1). Test.run() exécute les tests enregistrés dans l'ordre et se termine avec le code 0 à la fin.
Comme un échec termine le processus avec un code non nul, le fichier peut être appelé par npm test et par n'importe quel service d'intégration continue. Attendez un moment (environ 500 ms) après ready avant la première requête : une requête envoyée immédiatement peut encore recevoir un 404. Utilisez RESTBuilder (ou REQUEST) contre le serveur local pour tester les routes, et appelez directement les actions avec ACTION().
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() });
}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();
}