diff --git a/test/runtime/samples/event-handler-dynamic-invalid/_config.js b/test/runtime/samples/event-handler-dynamic-invalid/_config.js
new file mode 100644
index 0000000000..ba1777f945
--- /dev/null
+++ b/test/runtime/samples/event-handler-dynamic-invalid/_config.js
@@ -0,0 +1,28 @@
+export default {
+ html: `
+
+ `,
+
+ async test({ assert, component, target, window }) {
+ const [buttonUndef, buttonNull, buttonInvalid] = target.querySelectorAll(
+ 'button'
+ );
+
+ const event = new window.MouseEvent('click');
+ let err = "";
+ window.addEventListener('error', (e) => {
+ e.preventDefault();
+ err = e.message;
+ });
+
+ // All three should not throw if proper checking is done in runtime code
+ await buttonUndef.dispatchEvent(event);
+ assert.equal(err, "", err);
+
+ await buttonNull.dispatchEvent(event);
+ assert.equal(err, "", err);
+
+ await buttonInvalid.dispatchEvent(event);
+ assert.equal(err, "", err);
+ },
+};
diff --git a/test/runtime/samples/event-handler-dynamic-invalid/main.svelte b/test/runtime/samples/event-handler-dynamic-invalid/main.svelte
new file mode 100644
index 0000000000..f4e8c5fdb7
--- /dev/null
+++ b/test/runtime/samples/event-handler-dynamic-invalid/main.svelte
@@ -0,0 +1,13 @@
+
+
+
+
+