2015-07-04 40 views
1

我正在用Siesta测试Ext JS前端。 这是我的登录/注销测试:Siesta Ext JS测试未完成

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上使用午睡3.0.2-lite。

回答

2

1#首先,您可以尝试删除t.done(),除非您真的在等待,否则在测试中通常不需要它。线束设置中的​​具有默认值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检查的事件,所以我不知道它是否工作。

+0

我试着删除t.done(),它没有帮助。事件检查是有效的,但只有当我在链的最后一个函数中有t.done()出于某种原因。我已经做出了你所建议的更改(t.done()除外),但是测试仍然没有结束。不显示失败/通过结果,并且勾号图标不会出现在gui中的测试图标前(无限闪电)。 – PEC

+0

您可以从底部开始移除链式步骤 - 查看测试代码或其他地方是否存在问题。另外,我建议在[Siesta论坛](http://www.bryntum.com/forum/)上撰写。Siesta开发人员通常会回答所有问题。这将是更广泛讨论的好地方。 – pagep

1

论坛上的Siesta开发人员建议通过在线束配置中将overrideSetTimeout设置为false来解决此问题。

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

午睡覆盖从每次测试异步代码跟踪的背景下,本土“的setTimeout”,但它似乎会导致问题。 它在论坛上为很多用户工作,告诉我它是否适合你,因为它没有解决我的问题。

更新:

在我身边原来,这个问题是由于注销本身,它使用window.location.reload()。如果有两个单独的页面/应用程序,这会使浏览器动作。

显然,您需要将harness对象中的separateContext选项设置为true。 该选项仅适用于标准(商业)软件包。