diff --git a/src/__tests__/events.js b/src/__tests__/events.js index 8f8ea563..b79cea35 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -376,6 +376,18 @@ test('assigns clipboardData properties', () => { expect(clipboardData.getData('text')).toBe('example') }) +test('assigns read-only target properties', () => { + const node = document.createElement('div') + const spy = jest.fn() + node.addEventListener('scroll', spy) + + expect(node.scrollWidth).toBe(0) + fireEvent.scroll(node, {target: {scrollWidth: 10}}) + + expect(spy).toHaveBeenCalledTimes(1) + expect(node.scrollWidth).toBe(10) +}) + test('fires events on Window', () => { const messageSpy = jest.fn() window.addEventListener('message', messageSpy) diff --git a/src/events.js b/src/events.js index b964f305..aba4f7b4 100644 --- a/src/events.js +++ b/src/events.js @@ -45,7 +45,15 @@ function createEvent( value: files, }) } - Object.assign(node, targetProperties) + + // Make read-only properties of events specifiable for tests. + Object.keys(targetProperties).forEach(key => { + Object.defineProperty(node, key, { + value: targetProperties[key], + writable: true, + }) + }) + const window = getWindowFromNode(node) const EventConstructor = window[EventType] || window.Event let event