Средства тестирования Rhino с использованием Dojo

Несмотря на то что платформа DOH может использоваться без инструментария Dojo, тем не менее есть вероятность, что вам потребуется использовать Dojo вместе с Rhino. Библиотека Core включает несколько замечательных примеров, которые можно запускать при помощи runner.js без дополнительных аргументов. Значения по умолчанию определяют, что тесты находятся в каталоге dojo/tests и используется версия библиотеки Base в файле dojo/dojo.js.

Если заглянуть в любой файл теста, находящийся в библиотеке Core, можно увидеть, что они устроены вполне очевидным образом. Каждый файл начинается с инструкции dojo.provide, которая определяет имя модуля тестов, затем выполняется подключение тестируемых ресурсов, и далее следует серия функций register, создающих контексты для тестов.

Предположим, что имеется некоторый модуль foo.bar, находящийся в файле /tmp/foo/bar.js, и что имеется файл с тестами /tmp/testBar.js. Содержимое обоих файлов JavaScript приводится ниже.
Сначала файл testBar.js:
/* dojo.provide объявляет модуль с тестами, как любой другой модуль */
dojo.provide("testBar");
/* Вам может потребоваться добавить пути к модулям, если они находятся
за пределами корневого каталога dojo */
dojo.registerModulePath("foo.bar", "/tmp/foo/bar");
/* с помощью dojo.require подключается все, что будет необходимо */
dojo.require("foo.bar");
/* регистрация модуля */
doh.register("testBar", [
function() { doh.t(alwaysReturnsTrue()); },
function() { doh.f(alwaysReturnsFalse()); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
{
name : "BazFixture",
setUp : function() {this.baz = new Baz;},
runTest : function() {doh.is(this.baz.talk(), "hello");},
tearDown : function() {delete this.baz;}
}
]);

А теперь содержимое файла foo/bar.js модуля foo.bar:
/* Коллекция малополезных функций */
dojo.provide("foo.bar");
function alwaysReturnsTrue() {
return true;
}
function alwaysReturnsFalse() {
return false;
}
function alwaysReturnsOdd() {
return Math.floor(Math.random()*10)*2-1;
}
// Взгляните: здесь есть даже определение "класса"
dojo.declare("Baz", null, {
talk : function() {
return "hello";
}
});

Выполнить тестирование можно с помощью следующей команды, запускаемой из каталога util/buildscripts:
java -jar ../shrinksafe/custom_rhino.jar runner.js dojoUrl=../../dojo/dojo.js
testUrl=/tmp/testBar.js

Если все идет, как планировалось, вы увидите сообщение, указывающее, что все тесты были успешно или неуспешно пройдены.


Регистрация группы тестов, совместно использующих одни и те же операции по инициализации и освобождению ресурсов, выполняется точно так же, за исключением того, что вместо функции doh.register (или ее более специализированной версии) следует использовать функцию doh.registerGroup.

Если вам требуется более полный контроль над выполнением тестов, вы можете приостанавливать и возобновлять тестирование программно, внеся следующие изменения в файл testBar.js:
/* загрузить dojo.js и runner.js */
load("/usr/local/dojo/dojo.js");
load("/usr/local/dojo/util/doh/runner.js");
/* dojo.provide объявляет модуль с тестами, как любой другой модуль */
dojo.provide("testBar");
/* Вам может потребоваться добавить пути к модулям, если они находятся
за пределами корневого каталога dojo */
dojo.registerModulePath("foo.bar", "/tmp/foo/bar");
/* с помощью dojo.require подключается все, что будет необходимо */
dojo.require("foo.bar");
/* регистрация модуля */
doh.register("testBar", [
function() { doh.t(alwaysReturnsTrue()); },
function() { doh.f(alwaysReturnsFalse()); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
function() { doh.is(alwaysReturnsOdd()%2, 1); },
{
name : "BazFixture",
setUp : function() {this.baz = new Baz;},
runTest : function() {doh.is(this.baz.talk(), "hello");},
tearDown : function() {delete this.baz;}
}
]);
doh.run();
/* можно приостанавливать и перезапускать по мере необходимости...


*/

Хотя мы не использовали тот факт, что testBar является модулем, который объявляется инструкцией dojo.provide, тем не менее вы легко можете объединить коллекции тестов с помощью инструкций dojo.require, как и в любом другом модуле, который объявляет себя. Хотя с помощью Rhino можно выполнять асинхронные тесты, тем не менее в следующем разделе описываются приемы асинхронного тестирования в броузере, потому что они особенно полезны для проведения тестирования сетевого вводавывода и таких событий, как анимация..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
Вопросы производительности
Запуск сборки
Настройка профиля
Настройка профиля (более грамотный вариант)
Платформа тестирования Dojo (DOH)