2016-07-10 31 views
5

Ich versuche, die beste Weg, dieses Verfahren zur Prüfung, um herauszufinden:Wie document.addEventListener ('keydown', cb) mit Mocha & Sinon testen?

document.addEventListener("keydown", function (event) { 
    var modifiers = event.altKey || event.ctrlKey || event.metaKey || 
        event.shiftKey; 
    var mapped = map[event.which]; 

    if (!modifiers) { 
     if (mapped !== undefined) { 
     event.preventDefault(); 
     self.emit("move", mapped); 
     } 
    } 
    }); 

ich möchte, um zu gewährleisten, wenn die Schlüssel sind Modifikatoren oder wenn die Schlüssel nicht abgebildet sind, passiert nichts, aber wenn Sie sind, um die self.emit Funktion auszuspionieren.

Antwort

0

Ich könnte es mit Sinon tun. Hier ist meine Lösung:

it('adds listener events', function() { 
    sinon.spy(document, 'addEventListener') 
    sinon.spy(window, 'addEventListener') 

    expect(document.addEventListener.calledOnce).not.to.be.true 
    expect(window.addEventListener.calledOnce).not.to.be.true 

    subject.myFunc() 

    expect(document.addEventListener.calledOnce).to.be.true 
    expect(window.addEventListener.calledOnce).to.be.true 
}) 

In meinem Fall hatte ich Fenster zu testen focus und Dokument click zum Beispiel.

Hoffe es hilft

+0

Dies ist nicht testen, was das OP testen möchte. Dies testet nur, ob 'addEventListener' aufgerufen wurde. Das OP möchte das Verhalten des mit 'addEventListener' hinzugefügten Ereignishandlers testen. – Louis

+0

Also, ich habe einen anderen Test für meine Funktion, die auf Listener aufgerufen wurde. das war der leichtere Weg, es zu verwirklichen – lucianosousa