2011-12-20 16 views
1

2つの質問があります:イベント抽象化の単体テストに最適な方法は?

1.)イベントリスナーを単体テストするにはどうすればよいですか? 2.HostMethodは正しく理解されていますか?

私はイベントリスナの抽象化を単体テストしようとしていますが、テストすると思う唯一の方法はウィンドウの 'load'イベントです。

私は、コード例では、ここにきました。またhttps://gist.github.com/1502326

、私はデビッド・マークス(@cinsoft)は、関連するホストオブジェクトのサポートを検出するisHostMethod使用していますが、私は適切な概念を理解したりしていなかった場合には不思議でしたか?だから、例えば、右(私はこれらの「条件」は信頼できないことを理解している)ホストオブジェクト/メソッドは、以下の条件の下で利用可能であるべきであるという考えに私を午前:

  • もしtypeofを返します「関数」(大多数のためのブラウザ)
  • typeofを返します「不明」(その実装はネイティブ関数のためにActiveXオブジェクトを使用IE < 9用)
  • もしtypeofを返します「オブジェクト」ifとES3の仕様が許可されているため、値は(「NULL」ではありません'オブジェクト'を返すためにnullが返されます)。

これらの条件のいずれかが当てはまる場合、である必要があります。これは、指定されたホストメソッドが使用可能であることを意味します。

でも、ホストオブジェクト/メソッドは、仕様の指示とは異なる方法で実装されている可能性があります。そのため、オブジェクトを作成してイベントがトリガされたかどうかを確認するには、 (または同様のテスト)?

これらのお問い合わせに関するご意見ありがとうございます。

+1

コードはコンテキストなしで存在することはできません。あなたが抽象化と呼ぶものは、環境に応じて同じ名前にマップされた3つの異なる関数です。そして、あなたが知っているように、これらの選択肢は異なるもの(実行命令、「複数」のリスナー)を行い、あなたがその存在を慎重にチェックしてもそれを継続します。 – galambalazs

答えて

0

最も簡単な方法は、合成クリックイベントを使用することです。

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; Opera 11

関連する問題