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