Поскольку start(), stop() будут удалены в Qunit 2.0, какова альтернатива асинхронным установкам и демонтажу с помощью методов beforeEach, afterEach? Например, если я хочу, чтобы beforeEach ждал завершения обещания?
Qunit beforeEach, afterEach - асинхронно
Ответы (3)
QUnit в основном хочет, чтобы люди перестали использовать глобальные методы (не только start()
и stop()
, но и test()
, expect()
и т. д.). Итак, начиная с версии 1.16.0, вы всегда должны использовать либо глобальное пространство имен (QUnit
), либо аргумент API assert
, передаваемый в функции test()
. Сюда входит новый асинхронный элемент управления:
QUnit.test( "testing async action", function( assert ) { // <-- note the `assert` argument here
var done = assert.async(); // tell QUnit we're doing async actions and
// hold onto the function it returns for later
setTimeout(function() { // do some async stuff
assert.ok( true, "This happened 100 ms later!" );
done(); // using the function returned from `assert.async()` we
// tell QUnit we're don with async actions
}, 100);
});
Если вы знакомы со старыми start()
и stop()
способами ведения дел, вы должны заметить, что они очень похожи, но более разделены на части и расширяемы.
Поскольку вызов метода async()
относится к аргументу assert
в тесте, его нельзя использовать в функции beforeEach()
. Если у вас есть пример того, как вы делали это раньше, опубликуйте его, и мы попробуем выяснить, как сделать это по-новому.
ОБНОВЛЕНИЕ
Ранее моя ошибка заключалась в том, что объект assert
передается в обратные вызовы beforeEach
и afterEach
в модулях, поэтому вы должны иметь возможность использовать ту же логику, что и для теста:
QUnit.module('set of tests', {
beforeEach: function(assert) {
var done = assert.async();
doSomethingAsync(function() {
done(); // tell QUnit you're good to go.
});
}
});
(проверено в QUnit 1.17.1)
QUnit.config.autostart = false;
, а затем, как только $.get()
завершится, сохранить возвращаемые данные и вызвать QUnit.start();
, чтобы все заработало.
- person Jordan Kasper; 05.02.2015
QUnit.start()
можно вызвать только один раз, чтобы запустить весь набор тестов. Это правильно?
- person niftygrifty; 05.02.2015
assert
передается в методы beforeEach/afterEach! Я обновлю свой ответ, но, похоже, вы можете использовать тот же синтаксис, что и в тестах для установки и демонтажа модуля.
- person Jordan Kasper; 05.02.2015
Видя, что никто не ответил на часть beforeEach/afterEach: набор тестов должен запускаться, как только загружается страница. Если это невозможно сразу, прибегните к настройке QUnit:
QUnit.config.autostart = false;
и продолжите настройку своего набора тестов (инициализация тестов, передача их в QUnit, асинхронное ожидание загрузки некоторых компонентов, будь то AJAX или что-то еще), вашего сайта и, наконец, когда он будет готов, просто запустите:
QUnit.start();
На сайте документации QUnit это описано.
Эмбер Кунит когда-то существовала beforeEach
/setup
, afterEach
/teardown
некоторое время сосуществуют вместе.
См. PR: https://github.com/emberjs/ember-qunit/pull/125