簡體   English   中英

如何最好地對事件抽象進行單元測試?

[英]How best to unit-test an events abstraction?

我有兩個問題:

1.)如何最好地對事件偵聽器進行單元測試? 2.)我是否正確理解isHostMethod?

我正在嘗試對事件偵聽器抽象進行單元測試,但是我認為可以測試它的唯一方法是針對窗口“加載”事件。

我在這里有一個代碼示例: https : //gist.github.com/1502326

另外,我正在使用David Mark(@cinsoft)的isHostMethod來檢測相關的宿主對象支持,但想知道我是否正確理解了這些概念? 因此,舉例來說,我是否認為主機對象/方法應該在以下條件下可用(盡管我知道這些“條件”是不可靠的)是正確的:

  • 如果typeof返回“函數”(對於大多數瀏覽器)
  • 如果typeof返回“未知”(對於IE <9,其實現將ActiveX對象用於本機函數)
  • 如果typeof返回'object'並且值不為'null'(因為ES3規范允許null返回不正確行為的'object')

如果這些條件中的任何一個成立,則(再次,不可靠地) 意味着可以使用指定的宿主方法。

但是,即使主機對象/方法的實現方式仍可能與規范指示的方式不同,因此在我創建對象並查看事件是否被觸發(或類似事件)的情況下執行完整的“功能檢測”會更加准確。測試)?

感謝您對這兩個查詢的任何建議。

最簡單的方法是使用綜合點擊事件。 給定要點中的代碼,您可以使用以下命令進行測試:

var evt;

events.add( document.body, "click", function() {
    // swap this for an assert(true, "message");
    console.log( true, "supported" );
});

// IE nodes support a click() method
if ( document.body.click ) {
    document.body.click();
} else {
// Standards based events have to be created, initialized and dispatched.    

  evt = document.createEvent("MouseEvents");
  evt.initMouseEvent( 
      "click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null 
  );

  document.body.dispatchEvent( evt ); 
}

請參閱: http//jsfiddle.net/rwaldron/CR4FC/

測試於:IE6,7,8; 鉻17; Firefox 10; Safari 5.1.2; 歌劇11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM