Siesta Ext JS测试未完成



我正在用Siesta测试ExtJS前端。这是我的登录/注销测试:

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();
        }
    );
});

测试将用户名和密码输入到登录面板中,然后单击登录按钮。加载主视图后,它将注销。出于某种原因,这个测试永远不会结束。

链中的每一个操作都是成功的,但测试仍然处于运行状态。

我该怎么解决这个问题?

我使用的是带有ExtJS 5.1.0的siesta-3.0.2 lite。

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()。如果存在两个独立的页面/应用程序,这将使浏览器发挥作用。

显然,您需要将harness对象中的separateContext选项设置为true此选项仅在标准(商业(软件包中提供

相关内容

  • 没有找到相关文章

最新更新