Тест 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.
2 ответа
1# Во-первых, вы можете попытаться удалить t.done (), это обычно не требуется в тестах, если вы действительно его не ждете. NeedDone в настройках жгута имеет значение по умолчанию False.
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 для проверки событий, поэтому я не уверен, работает ли он.
Разработчики Siesta на форуме предложили решить эту проблему, установив для overrideSetTimeout значение false в конфигурации вашего жгута.
Harness.configure({
...
overrideSetTimeout: false,
...
});
Siesta переопределяет собственный "setTimeout" из контекста каждого теста для асинхронного отслеживания кода, но, похоже, вызывает проблемы. Он работал для многих пользователей на форуме, скажите, работает ли он для вас, потому что он не решил мои проблемы.
Обновить:
Проблема на моей стороне оказалась из-за самого выхода из системы, который использует window.location.reload()
, Это заставляет браузер действовать, если есть две отдельные страницы / приложения.
По-видимому, вам нужно установить для параметра отдельный Context в объекте Harness значение true. Эта опция доступна только в стандартной (коммерческой) упаковке.