Az alkalmazás tesztelése a beépített tesztfuttatóval
A Total.js-nek van egy kis tesztfuttatója, a total5/test. A tesztfájl egy hétköznapi Total.js-script: betölti a keretrendszert és a futtatót, elindítja az alkalmazást, és amikor az ready, regisztrálja a teszteit. A Test.push(name, fn) hozzáad egy tesztet; az fn(next) elvégzi a dolgát, és a next() hívásával folytatja a következővel. A Test.print(message, error) egy ellenőrzést jelent: sikerhez null-t adj error-ként (kiírja: [OK]), kudarchoz üzenetet (kiírja: [FAIL], és a folyamat 1-es kóddal fejeződik be). A Test.run() sorrendben lefuttatja a regisztrált teszteket, és a végén 0-s kóddal fejeződik be.
Mivel a kudarc nullától eltérő kóddal fejezi be a folyamatot, a fájlt hívhatja az npm test és bármely CI-szolgáltatás. Az ready után várj egy kicsit (nagyjából 500 ms-ot) az első kérés előtt: a rögtön elküldött kérés még kaphat 404-et. Az útvonalak teszteléséhez használd a RESTBuilder-t (vagy a REQUEST-et) a helyi szerver ellen, az akciókat pedig közvetlenül hívd az ACTION()-nel.
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();
}