Вы используете синхронные тесты, в то время как обратные вызовы инициируемых событий асинхронны.
Чтобы исправить это, вы должны реализовать «asyncTest» и вызвать функцию запуска, когда утверждения теста готовы к сбору.
Ваш второй тест был сбой с сообщением:
Called start() while already started (QUnit.config.semaphore was 0 already)
Teste Точно уже потому, что это был синхронный тест, началась, и вы вызова метода запуска() еще раз.
А также в вашем первом тесте, который не указывает функцию обратного вызова, вы должны обернуть асинхронный вызов другой функцией, чтобы вы могли вызвать start(), когда имитированный вызов AJAX готов.
Я обновил свой JSFiddle с рабочим кодом: http://jsfiddle.net/hhk6u/8/ новый код:
QUnit.config.autostart = false;
QUnit.config.testTimeOut = 1000;
asyncTest('Some test that needs companies.', function() {
function getCompanies() {
var companies = new Companies();
ok(1);
start();
}
setTimeout(getCompanies, 500);
});
asyncTest('Some other async test that triggers a listener in companies.', function() {
var companies = new Companies();
events.trigger("userSet:company", { name: "Acme", id: 1 });
stop();
events.on('fetched:departments', function(response) {
console.log(response);
deepEqual(response, [1, 2, 3]);
start();
});
});
Обратите внимание, что в первом методе испытаний я создал функцию «getCompanies», которая будет вызвана после перерыва (500 миллисекунд), который должен быть достаточным для завершения вызова AJAX.
Вы должны отрегулировать это время в соответствии с вашими потребностями, а также изменить значение «testTimeOut», чтобы ваши методы не выполнялись бесконечно.
См QUnit конфигурация Документы для получения более подробной информации: http://api.qunitjs.com/QUnit.config/
не может воспроизводить (каждый раз дает OK). протестирован на хроме 26.0.1410.63 и firefox 21.0 –
действительно? Я получаю каждый другой, который проходит/терпит неудачу. Я получаю сообщение об ошибке: 'start()' уже запущен. Второй тест слышит событие от обеих переменных 'company'. Не следует ли сначала уничтожить первую, после того как она выпадет из сферы действия? Я чувствую, что здесь есть что-то фундаментальное. –