2017-09-24 5 views
0

J'ai un morceau de code qui met en place mes gestionnaires d'événements:Comment déclencher un événement jQuery .on ('click', selector, callback) depuis JSDOM?

const element = $('#my-element'); 
const menuToggle = '.menu-toggle'; 
function assignEventHandlers() { 
    element.on('click', menuToggle, handleMenuClicked); 
} 

En JSDOM, je veux déclencher cet événement de clic pour un test unitaire de mocha. Je peux sélectionner l'élément .menu-toggle dans JSDOM, mais si je vais le déclencher comme ceci, $('.menu-toggle').trigger('click'); la fonction de rappel handleMenuClicked ne sera pas appelée.

Comment déclencher cet événement?

Répondre

0

Vous pouvez utiliser le DOM et Api envoyer un événement à l'aide externe dispatchEvent()

Dans votre cas, le code pourrait ressembler à ceci:

var event = new MouseEvent('click', { 
    'view': window, 
    'bubbles': true, 
    'cancelable': true 
    }); 
$('.menu-toggle')[0].dispatchEvent(event); 

Je ne sais pas comment jQuery a cette mise en œuvre , mais je suis venu à travers cela et vu cela travaillant sur jsdom

+0

J'ai essayé cela, mais quand je remplace la fenêtre avec ma variable de fenêtre jsdom, j'obtiens une erreur qui dit que MouseEvent n'est pas défini. Des idées? – cjh193

+0

@ cjh193 Quelle est votre version de jsdom? – Burimi

+0

jsdom version 11.2.0 – cjh193