Тест Siesta Ext JS не завершается

Я тестирую внешний интерфейс Ext JS с помощью Siesta. Вот мой тест входа/выхода:

StartTest(function(t) {
    t.diag("Login/Logout");
    t.chain(
        { waitForCQ : '#loginPanel' },
        function(next) {
            t.cq1("#username").setValue();
            t.cq1("#password").setValue();
            next();
        },
        { click: '>> #username' },
        { type: '******', target : '>> #username' },
        { type: '******', target : '>> #password' },
        { click: '>> #loginButton' },
        { waitForCQ: '#mainView' },
        { click: '>> #logoutButton' },
        { waitForCQ: 'messagebox #ok' },
        function(next) {
            t.waitForEvent(Ext.globalEvents, 'logoutComplete', function () {});
            next();
        },
        { click : '>> messagebox #ok' },
        function() {
            t.done();
        }
    );
});

Тест вводит имя пользователя и пароль в панель входа, затем нажимает кнопку входа. После загрузки основного вида происходит выход из системы. По какой-то причине этот тест никогда не заканчивается.

Каждое действие в цепочке выполнено успешно, но тест все еще зависает.

Как я могу это исправить?

Я использую siesta-3.0.2-lite с ExtJS 5.1.0.


person PEC    schedule 04.07.2015    source источник


Ответы (2)


1# Сначала вы можете попробовать удалить t.done( ) , в тестах он обычно не нужен, если вы его действительно не ждете. needDone в настройках подвески имеет значение по умолчанию ЛОЖЬ.

2# Вы используете waitForEvent, это обычно делается, когда вы передаете туда обратный вызов. Итак, ваша функция будет выглядеть так:

function(next) {
    t.waitForEvent(Ext.globalEvents, 'logoutComplete', next);
},

Но если вы просто хотите знать, что событие было запущено, вы можете использовать функцию firesOnce . Не забывайте, что вам необходимо зарегистрировать проверку события перед выполнением действий, которые его запускают.

Таким образом, ваш код может выглядеть так:

 function(next) {
     t.firesOnce(Ext.globalEvents, 'logoutComplete','Logout completed!');
     next();
 },
 { click: '>> #logoutButton' },
 { waitForCQ: 'messagebox #ok' },
 { click : '>> messagebox #ok' },

Но я никогда не использовал Ext.globalEvents для проверки событий, поэтому не уверен, что это работает.

person pagep    schedule 08.07.2015
comment
Я попытался удалить t.done(), это не помогло. Проверка событий работает, но только если по какой-то причине у меня есть t.done() в последней функции цепочки. Я внес предложенные вами изменения (кроме t.done()), но тест все еще не завершен. Результаты «пройдено/пройдено» не отображаются, и значок галочки не отображается перед значком теста в графическом интерфейсе (бесконечная молния). - person PEC; 08.07.2015
comment
Вы можете начать удалять шаги цепочки снизу, чтобы увидеть, проблема в вашем тестовом коде или где-то еще. Также предлагаю написать на форум Siesta. Разработчики Siesta обычно отвечают на все вопросы. И это будет лучшее место для более широкого обсуждения. - person pagep; 09.07.2015

Разработчики Siesta на форуме предложили решить эту проблему, установив для overrideSetTimeout значение false в конфигурации вашего жгута.

Harness.configure({
    ...
    overrideSetTimeout: false,
    ...
});

Siesta переопределяет собственный setTimeout из контекста каждого теста для отслеживания асинхронного кода, но, похоже, это вызывает проблемы. Это сработало для многих пользователей на форуме, скажите, сработало ли это для вас, потому что это не решило мои проблемы.

Обновление:

Проблема на моей стороне оказалась из-за самого выхода из системы, который использует window.location.reload(). Это заставляет браузер действовать, если есть две отдельные страницы/приложения.

Судя по всему, вам нужно установить separateContext опция в объекте жгута в true. Эта опция доступна только в стандартном (коммерческом) пакете.

person aszahran    schedule 05.08.2015