ForgeTotal.js 5
bg

Total.js 5

Тествайте приложението с вградения изпълнител на тестове

Total.js 5 · total5@0.0.19 testingci Изпълнено с Total.js 5

Total.js има малък изпълнител на тестове, total5/test. Тестовият файл е обикновен скрипт на Total.js: зарежда framework-а и изпълнителя, стартира приложението и, когато е ready, регистрира тестовете си. Test.push(name, fn) добавя тест; fn(next) върши работата си и извиква next(), за да продължи със следващия. Test.print(message, error) отчита една проверка: подайте null като error за успех (отпечатва се [OK]) или съобщение за неуспех (отпечатва се [FAIL] и процесът завършва с код 1). Test.run() изпълнява регистрираните тестове по ред и в края завършва с код 0.

Тъй като неуспехът завършва процеса с ненулев код, файлът може да бъде извикан от npm test и от всяка CI услуга. Изчакайте малко (около 500 ms) след ready преди първата заявка: заявка, изпратена веднага, все още може да получи 404. Използвайте RESTBuilder (или REQUEST) срещу локалния сървър, за да тествате маршрути, и извиквайте действията директно с ACTION().

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