Testează aplicația cu rulerul de teste încorporat
Total.js are un mic runner de teste, total5/test. Un fișier de test este un script Total.js obișnuit: încarcă framework-ul și runnerul, pornește aplicația și, când este ready, își înregistrează testele. Test.push(name, fn) adaugă un test; fn(next) își face treaba și apelează next() pentru a continua cu următorul. Test.print(message, error) raportează o verificare: transmite null ca error pentru succes (se afișează [OK]) sau un mesaj pentru eșec (se afișează [FAIL] și procesul se încheie cu codul 1). Test.run() rulează testele înregistrate în ordine și se încheie cu codul 0 la final.
Deoarece un eșec încheie procesul cu un cod diferit de zero, fișierul poate fi apelat de npm test și de orice serviciu CI. Așteaptă un moment (aproximativ 500 ms) după ready înainte de prima cerere: o cerere trimisă imediat poate primi încă un 404. Folosește RESTBuilder (sau REQUEST) împotriva serverului local pentru a testa rutele și apelează acțiunile direct cu 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();
}