2016-01-22 10 views
9

jquery-jasmineを使わずにジャスミンでイベントが発生した場合、どうすればテストできますか?ジャスミンでイベントが発生したかどうかのテスト

jQuery(wohoo)を使用しないプロジェクトに取り組んでいます。私は、メニュートリガ機能の単体テストを作成しようとしています。それは次のように機能します。

  • あなたはボタン
  • 私のテスト可能なコンポーネントは、その後、私は部品が実際にカスタムイベントを送出したことをテストしたい
  • document.dispatchEvent(new CustomEvent('menu.toggle'))を実行]をクリックします。

これはどのようにテストしますか?

答えて

7

は少し周りを演奏し、うまく解決策が見つかりました:

import triggerEvent from 'trigger-event'; 
import component from './components/site-menu'; 

describe('triggering menu button',() => { 
    let menuToggleSpy; 
    beforeEach(() => { 
    menuToggleSpy = jasmine.createSpy('event'); 
    component(); 
    }); 

    it('dispatches menu.toggle event',() => { 
    document.addEventListener('menu.toggle', menuToggleSpy); 

    const $trigger = document.querySelector('.js-trigger-main-menu'); 
    triggerEvent($trigger, 'click'); 

    expect(menuToggleSpy).toHaveBeenCalled(); 
    }); 
}); 

は基本的に私のイベントのイベントハンドラとして追加し、それが呼ばれています確認し、「イベント」と呼ばれる新しいスパイを作成します。

これを行うより良い方法がある場合は、別の回答を受け入れることができます。

+0

ここで 'menuToggleSpy'はどこに定義されていますか?私は "変数を見つけることができません"エラーが表示されます。 – adamdport

+0

ああ、 'spy === menuToggleSpy'。私は私の答えを更新します。 –

関連する問題