2016-07-06 7 views
1

ブラウザで実行中のモカを使用してユニットテスト内でスクロールイベントをトリガーしようとしています。私はそれに依存する関数のためのスクロールイベントをトリガするにはどうすればよいユニットテストのトリガーイベント

function toggleBgHandler(html, ele) { 
     document.addEventListener("scroll", (e) => { 
     if (html[0].scrollTop === 0) { 
      ele.classList.remove("toggle-bg"); 
     } else { 
      ele.classList.add("toggle-bg"); 
     } 
     }); 
    } 

:私は、テストしようとしています

describe('Background Change', function() { 
    describe('toogleBgHandler()', function() { 
    it('should contain toggle-bg when scrollTop is more than 0', function() { 
    let html = document.createElement('html'); 
    var target = []; 
    target.push(html); 
    let body = document.createElement('body'); 
    let div = document.createElement('div'); 
    html.appendChild(body); 
    body.appendChild(div); 
    document.body.dispatchEvent(new Event("scroll")); 
    toggleBgHandler(target, div) 
    chai.assert.isTrue(div.classList.contains("toggle-bg")); 
    }); 
    }); 
}); 

が機能:私は、次のコードを持っていますか?イベントオブジェクトの作成も試しましたが、それもうまくいきませんでした。どのポインタも素晴らしいでしょう。

+0

このテストはブラウザの内部で実行されていますか、または 'jsdom'のようなものを使用していますか? – Jacob

+0

@Jacobこのテストはブラウザで実行されています。明確にするために更新されました。 – freetoplay

+0

イベントを作成することは適切なことでしょう。だから、何が試みられたのかを知ることはいいでしょう。 – Jacob

答えて

0

ウィンドウまたは_elementでコードが探しているスクロールイベントはありますか?それは、ウィンドウ上にある場合は、このように、スクロールイベントを送出することができるはずです。そうでなければ

window.dispatchEvent(new Event('scroll')); 

は、あなたが行うことができます:

element.dispatchEvent(new Event('scroll')); 

Here's a jsfiddle実証しました。

+0

変更を反映したコードを更新しましたが、それでも何らかの理由で私のために働いていません。 – freetoplay

+0

アップデートでは、イベントリスナーが追加される前にイベントをディスパッチしています。 'toggleBgHandler'を呼び出し、イベントを送出してからアサートします。 – Jacob

+0

私もそれを試みましたが、スクロールイベントがリスナー内のコードが呼び出されることはないため、取り上げられていないようです。 – freetoplay

関連する問題