Все. Разобрался сам. Если кому интересно, вот решение:
Привел проект к такой структуре (это было не обязательно, но пришлось сделать для других целей):
project_root
|--src
|-- main
|-- webapp
|-- index.html
|-- js
|-- dtk
|-- dojo
|-- dijit
|-- dojox
|-- util
|-- jla
|-- some
|-- module.js
|-- test
|-- dojo-test.sh
|-- dojo-test-config.js
|-- jla
|-- root-test.js
|-- some
|-- test.js
Код скрипта
dojo-test.js:
#!/bin/bash
# Скрипт для запуска тестов проект. Имеет два способа запуска:
# 1) Запуск тестирования всего проекта:
# ./dojo-test.sh
# При этом в качестве основного теста выступает тест
# ${project_root}/jla-web-app/src/main/webapp/js/test/jla/root-test.js,
# который запускает остальные тесты
# 2) Запуск конкретного теста:
# ./dojo-test.sh -t test/some/test
format() {
printf " %25s: %s\n" $1 $2
}
# как оказалось запускать тестирование нужно из этой директории (тут путь взят относительно директории скрипта):
cd ../dtk/util/doh
CURRENT_DIR='.'
SOURCE_DIR='../../../'
PROJECT_DIR=$SOURCE_DIR'../../../../'
DOJO_DIR=$SOURCE_DIR'dtk/dojo'
DOJO_JS=$DOJO_DIR'/dojo.js'
RHINO=$SOURCE_DIR'dtk/util/shrinksafe/js.jar'
CONFIG_FILE=$SOURCE_DIR'test/dojo-test-config.js'
TARGET_MODULE=
if [ "$1" = "-t" ] ; then
shift
TARGET_MODULE=$1
shift
else
TARGET_MODULE='test/root-test'
fi
echo''
echo 'Testing project '$(readlink -f $PROJECT_DIR)':'
echo''
format 'RHINO' $RHINO
format 'DOJO.JS' $DOJO_JS
format 'BASE_URL' $DOJO_DIR
format 'CONFIG' $CONFIG_FILE
format 'TESTS' $TARGET_MODULE
echo''
echo 'Run test '$TARGET_MODULE'...'
java -jar $RHINO $DOJO_JS baseUrl=$BASE_URL load=$CONFIG_FILE load=doh test=$TARGET_MODULE
Содержимое файла конфига (который
dojo-test-config.js):
require({
//пути задаются относительно файла dojo.js
paths: {
//путь к исходникам jla
"jla" : "../../jla",
//путь к тестам jla
"test" : "../../test/jla"
}
});
Все. Теперь храним исходники в директории
${project_root}/src/main/webapp/js/jla
Все тесты хранятся в директории
${project_root}/src/main/webapp/js/test/jla
Пример теста
${project_root}/src/main/webapp/js/test/jla/some/test.js:
define(["doh/runner"], function(doh) {
doh.register("Tests group name", {
name: "Test name",
setUp: function() {
//тут инициализация чего
},
runTest: function() {
require(["jla/some/module"], function(module) {
//тут собственно тестируем наш модуль module
});
},
tearDown: function() {
//тут действия после тестирования
}
});
});
Запускать скрипт
dojo-test.sh нужно из этой директории
${project_root}/src/main/webapp/js/dtk/util/doh
с помощью команды:
./dojo-test.sh -t test/some/test
Либо если у вас есть несколько тестов и вы хотите запустить их все сразу, то нужно создать в директории
${project_root}/src/main/webapp/js/test/jla/
файл
root-test.js следующего содержания:
define([
"doh/runner",
"test/some/test1",
"test/some/test2"
//собственно тут перечисляем все тесты, которые хотим запустить
], function(doh) {
return 1;//почему-то нужно что-то обязательно вернуть, вероятно по другому Dojo Loader не понимает, что это модуль и не грузит его
});
И запускаем скрипт
dojo-test.sh с помощью команды:
./dojo-test.sh
Также есть возможность запускать тестирование из браузера. Для этого нужно открыть следующий адрес (адрес дан для моего примера):
http://sin2/js/dtk/util/doh/runner.html?paths=jla,../../../js/jla;test,../../../js/test/jla&test=test/some/test
У меня поднят web-сервер Apachе, который разрешает
sin2 в директорию
${project_root}/src/main/webapp/
Собственно про параметры. Первый параметр
paths=jla,../../../js/jla;test,../../../js/test/jla
делает тоже самое что и конфиг-файл dojo-test-config.js - задает пути, в которых dojo будет искать исходные файлы модулей и тестов.
Второй параметр
test=test/some/test
задает тест который будет запущен.
В нашем случае для запуска всех тестов можно сразу было задать этот параметр в таком виде:
test=test/root-test