2015-07-04 70 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。 該選項僅適用於標準(商業)軟件包。