diff --git a/src/compile/nodes/EventHandler.ts b/src/compile/nodes/EventHandler.ts index e426efa79c..ee9db7a850 100644 --- a/src/compile/nodes/EventHandler.ts +++ b/src/compile/nodes/EventHandler.ts @@ -32,7 +32,7 @@ export default class EventHandler extends Node { if (node && node.type === 'VariableDeclaration') { // for `const handleClick = () => {...}`, we want the [arrow] function expression node const declarator = node.declarations.find(d => d.id.name === info.expression.name); - node = declarator.init; + node = declarator && declarator.init; } if (node && /Function/.test(node.type) && node.params.length === 0) { diff --git a/test/runtime/samples/event-handler-destructured/_config.js b/test/runtime/samples/event-handler-destructured/_config.js new file mode 100644 index 0000000000..b32fe76c0a --- /dev/null +++ b/test/runtime/samples/event-handler-destructured/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ` + + `); + } +}; diff --git a/test/runtime/samples/event-handler-destructured/main.svelte b/test/runtime/samples/event-handler-destructured/main.svelte new file mode 100644 index 0000000000..d80c7ed15c --- /dev/null +++ b/test/runtime/samples/event-handler-destructured/main.svelte @@ -0,0 +1,16 @@ + + + \ No newline at end of file