# Az alkalmazás tesztelése a beépített tesztfuttatóval

> Írj egy test.js-t, amely elindítja az alkalmazást, a Test.push()-sal regisztrál teszteket, a Test.print()-tel ellenőrzi az eredményeket, és nullától eltérő kóddal fejeződik be, ha valamelyik megbukik.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: hu
Content-SHA256: 7a74b8b8cfcfd4e5cfc6a94c5c06830df82bffb9fbd4699514c561536ef0fc32
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

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.

```js 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() });
}
```

```js 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();
}
```
