Это пример, адаптированный из вашего исходного кода, который выполняет метод установки для каждого метода тестирования:
function doExpensiveSetupForModuleA() {
console.log("setup A");
}
function testA1() {
console.log("testA1");
start();
}
function testA2() {
console.log("testA2");
start();
}
function testA3() {
console.log("testA3");
start();
}
function doExpensiveSetupForModuleB() {
console.log("setup B");
}
function testB1() {
console.log("testB1");
start();
}
function testB2() {
console.log("testB2");
start();
}
function testB3() {
console.log("testB3");
start();
}
QUnit.module("A", { setup: doExpensiveSetupForModuleA });
asyncTest("A.1", testA1);
asyncTest("A.2", testA2);
asyncTest("A.3", testA3);
QUnit.module("B", { setup: doExpensiveSetupForModuleB });
asyncTest("B.1", testB1);
asyncTest("B.2", testB2);
asyncTest("B.3", testB3);
Это будет работать независимо от порядка выполнения тестов, а также от времени, затрачиваемого каждым методом на завершение.
Вызовы start() гарантируют, что результаты теста будут собраны только в этой точке метода.
Более подробные примеры можно найти в кулинарной книге QUnit: http://qunitjs.com/cookbook/#asynchronous-callbacks
Обновлено: если вы не хотите, чтобы ваши дорогостоящие методы выполнялись перед каждым тестовым методом, а фактически только один раз для каждого модуля, просто добавьте управляющие переменные в свой код, чтобы проверить, был ли модуль уже настроен:
var moduleAsetUp = false;
var moduleBsetUp = false;
function doExpensiveSetupForModuleA() {
if (!moduleAsetUp) {
console.log("setting up module A");
moduleAsetUp = true;
}
}
...
function doExpensiveSetupForModuleB() {
if (!moduleBsetUp) {
console.log("setting up module B");
moduleBsetUp = true;
}
}
...
В этом примере вывод будет следующим:
setting up module A
testA1
testA2
testA3
setting up module B
testB1
testB2
testB3
Таким образом, вы используете свои дорогие методы в качестве настройки модуля вместо настройки метода тестирования.
Предполагается, что модульные тесты должны быть атомарными, независимыми, изолированными, и поэтому порядок, в котором они выполняются, не должен иметь значения.
Qunit не всегда запускает тесты в одном и том же порядке, в любом случае, если вы хотите, чтобы ваши тесты выполнялись в определенном порядке, вы можете просто указать QUnit не менять их порядок:
QUnit.config.reorder = false;
Таким образом, вы можете гарантировать, что testA запустится перед testB.
person
jfoliveira
schedule
09.05.2013