diff --git a/src/cdk/testing/testbed/fake-events/event-objects.ts b/src/cdk/testing/testbed/fake-events/event-objects.ts index f211df2920f6..6e3bf7c8f624 100644 --- a/src/cdk/testing/testbed/fake-events/event-objects.ts +++ b/src/cdk/testing/testbed/fake-events/event-objects.ts @@ -46,8 +46,15 @@ export function createMouseEvent( // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - defineReadonlyEventProperty(event, 'defaultPrevented', true); - return originalPreventDefault(); + /* + Calling originalPreventDefault before the if check ensures + that non IE apps never call defineReadonlyEventProperty + */ + const result = originalPreventDefault(); + if (!event.defaultPrevented) { + defineReadonlyEventProperty(event, 'defaultPrevented', true); + } + return result; }; return event; @@ -157,8 +164,15 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - defineReadonlyEventProperty(event, 'defaultPrevented', true); - return originalPreventDefault(); + /* + Calling originalPreventDefault before the if check ensures + that non IE apps never call defineReadonlyEventProperty + */ + const result = originalPreventDefault(); + if (!event.defaultPrevented) { + defineReadonlyEventProperty(event, 'defaultPrevented', true); + } + return result; }; return event;