Qunit beforeEach, afterEach - асинхронно

Поскольку start(), stop() будут удалены в Qunit 2.0, какова альтернатива асинхронным установкам и демонтажу с помощью методов beforeEach, afterEach? Например, если я хочу, чтобы beforeEach ждал завершения обещания?


person Mattan Bitner    schedule 31.12.2014    source источник


Ответы (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)

person Jordan Kasper    schedule 31.12.2014
comment
У меня та же проблема. Вот мой пример использования при тестировании интеграции для приложения Ember: gist.github.com/tygriffin/0d8cae37c47b243588b9 - person niftygrifty; 04.02.2015
comment
@niftygrifty Я бы рекомендовал сделать этот вызов один раз перед запуском любых тестов или модулей и отложить запуск QUnit с помощью QUnit.config.autostart = false;, а затем, как только $.get() завершится, сохранить возвращаемые данные и вызвать QUnit.start();, чтобы все заработало. - person Jordan Kasper; 05.02.2015
comment
Это хорошая идея для изолированного варианта использования, на который я ссылался, но в идеале я хотел бы иметь конечную точку для демонтажа, а также множество различных конечных точек для настройки. Я также хотел бы выполнять настройку и демонтаж хотя бы между каждым модулем, если не между каждым тестом. Насколько я могу судить, QUnit.start() можно вызвать только один раз, чтобы запустить весь набор тестов. Это правильно? - person niftygrifty; 05.02.2015
comment
Итак, на самом деле... похоже, что теперь объект assert передается в методы beforeEach/afterEach! Я обновлю свой ответ, но, похоже, вы можете использовать тот же синтаксис, что и в тестах для установки и демонтажа модуля. - person Jordan Kasper; 05.02.2015
comment
Большое спасибо за двойную проверку! Хотел бы я, чтобы у меня был этот вопрос, чтобы я мог отметить его принятым. - person niftygrifty; 05.02.2015
comment
;) Спасибо... когда-нибудь @mattan-bitner увидит, насколько это круто, и примет это. - person Jordan Kasper; 05.02.2015

Видя, что никто не ответил на часть beforeEach/afterEach: набор тестов должен запускаться, как только загружается страница. Если это невозможно сразу, прибегните к настройке QUnit:

QUnit.config.autostart = false;

и продолжите настройку своего набора тестов (инициализация тестов, передача их в QUnit, асинхронное ожидание загрузки некоторых компонентов, будь то AJAX или что-то еще), вашего сайта и, наконец, когда он будет готов, просто запустите:

QUnit.start();

На сайте документации QUnit это описано.

person buer    schedule 11.08.2015

Эмбер Кунит когда-то существовала beforeEach/setup, afterEach/teardown некоторое время сосуществуют вместе.

См. PR: https://github.com/emberjs/ember-qunit/pull/125

person Alan Dong    schedule 08.08.2017