2011-07-21 13 views
6

jQueryまたはネイティブ要素トリガー関数を使用して実際のユーザーイベントをシミュレートすることがますます困難になってきています。たとえば、テキスト入力があり、ユーザーが文字を追加できないようにするには、イベントでjQuery-normalizedイベントオブジェクトを使用してe.preventDefault()を呼び出すことができます。ただし、このテストシナリオをプログラム的に検証する方法はありません。TDD JavaScriptのユーザー入力をシミュレートする

preventDefaultを呼び出さなくても、jQueryのkeydownトリガーは「実際の」イベントではないため、次のテストは成功します。正しいコードなし

input.val('test').trigger(jQuery.Event({ 
    which: 68 
}); 
expect(input).toHaveValue('test'); 

、入力が「TESTD」の値を有していなければならないため、このテストは失敗する(68は「D」の文字コードです)。

誰でもシミュレーションする方法やライブラリを知っていますか?realブラウザのUIイベント?

答えて

4

シミュレートリアルイベントは非常に複雑です。まず、必要なイベントの種類を決定し、document.createEventで作成する必要があります。次に、異なるinit*Eventを呼び出して、イベントオブジェクトを初期化します。最後に、element.dispatchEventを使用して、イベントをターゲットオブジェクトにディスパッチします。

+0

私はこれを試しましたが、keyCodeとcharCode initKeyboardEventで指定したにもかかわらず、0のままでした。なぜどんなアイデア? Aスペックブラウザのためにこれを行うことができるライブラリがあれば素晴らしいだろう...このハードルを乗り越えることができるなら、私は自分自身を書くかもしれない。 –

+0

@MattyFこれはWebKitのアップストリームコードからのChromeの[バグ](https://bugs.webkit.org/show_bug.cgi?id=16735)で、initKeyboardEventで初期化されたイベントは常に 'keyCode' 'charCode'は0に設定されています。私はあなたがWebKitベースのブラウザの代わりにFFを参照すべきだと思います。 – Ghostoy

2

はおそらく、セレンを使用して試してみたい:

http://seleniumhq.org/はここでまともな概要です:http://blog.frontendforce.com/2010/05/unit-testing-in-javascript-selenium/

+0

私は昨日、これを見ていた - JavaScriptでセレンを使用する方法があり、私は私の自動テストでそれを統合することができるように(JsTestDriver + Jasmine)? –

+0

私はあなたがそれらを一緒に使うことはできないと思います。多くの人が、JsTestDriverテストの「ユニットテスト」とSeleniumの「統合テスト」を考えています。 – brendan

+0

あなたが探しているのではなく、おそらく使用しているものではありません:http://stackoverflow.com/questions/5091935/can-i-write-selenium-tests-in-javascript – brendan

0

私はYUIにそれを行うためのコードがあると思います。コードをダウンロードして見てください。私はそれがsimulate.jsまたは類似のものと呼ばれると信じています。あるいは、セレンがどのようにそれをするのか見ることができます。ここで

関連する問題