فهرست منبع

Merge pull request #3628 from overleaf/ae-global-localstorage

Use Object.defineProperty to set global.localStorage for tests

GitOrigin-RevId: 541a253a6d19fcc93b40c74942ae8ecffb85fa60
Miguel Serrano 5 سال پیش
والد
کامیت
b35114b81a

+ 13 - 8
services/web/test/frontend/bootstrap.js

@@ -26,14 +26,19 @@ moment.updateLocale('en', {
 })
 
 let inMemoryLocalStorage = {}
-global.localStorage = {
-  // localStorage returns `null` when the item does not exist
-  getItem: key =>
-    inMemoryLocalStorage[key] !== undefined ? inMemoryLocalStorage[key] : null,
-  setItem: (key, value) => (inMemoryLocalStorage[key] = value),
-  clear: () => (inMemoryLocalStorage = {}),
-  removeItem: key => delete inMemoryLocalStorage[key]
-}
+Object.defineProperty(global, 'localStorage', {
+  value: {
+    // localStorage returns `null` when the item does not exist
+    getItem: key =>
+      inMemoryLocalStorage[key] !== undefined
+        ? inMemoryLocalStorage[key]
+        : null,
+    setItem: (key, value) => (inMemoryLocalStorage[key] = value),
+    clear: () => (inMemoryLocalStorage = {}),
+    removeItem: key => delete inMemoryLocalStorage[key]
+  },
+  writable: true
+})
 
 // node-fetch doesn't accept relative URL's: https://github.com/node-fetch/node-fetch/blob/master/docs/v2-LIMITS.md#known-differences
 const fetch = require('node-fetch')

+ 12 - 5
services/web/test/frontend/features/outline/components/outline-pane.test.js

@@ -15,11 +15,16 @@ describe('<OutlinePane />', function() {
     renderWithEditorContext(children, { projectId: '123abc' })
   }
 
+  let originalLocalStorage
   before(function() {
-    global.localStorage = {
-      getItem: sinon.stub().returns(null),
-      setItem: sinon.stub()
-    }
+    originalLocalStorage = global.localStorage
+
+    Object.defineProperty(global, 'localStorage', {
+      value: {
+        getItem: sinon.stub().returns(null),
+        setItem: sinon.stub()
+      }
+    })
   })
 
   afterEach(function() {
@@ -30,7 +35,9 @@ describe('<OutlinePane />', function() {
   })
 
   after(function() {
-    delete global.localStorage
+    Object.defineProperty(global, 'localStorage', {
+      value: originalLocalStorage
+    })
   })
 
   it('renders expanded outline', function() {

+ 13 - 8
services/web/test/frontend/infrastructure/local-storage.test.js

@@ -10,22 +10,27 @@ describe('localStorage', function() {
   })
 
   after(function() {
-    global.localStorage = originalLocalStorage
+    Object.defineProperty(global, 'localStorage', {
+      value: originalLocalStorage
+    })
   })
 
   beforeEach(function() {
-    global.localStorage = {
-      getItem: sinon.stub().returns(null),
-      setItem: sinon.stub(),
-      clear: sinon.stub(),
-      removeItem: sinon.stub()
-    }
+    Object.defineProperty(global, 'localStorage', {
+      value: {
+        getItem: sinon.stub().returns(null),
+        setItem: sinon.stub(),
+        clear: sinon.stub(),
+        removeItem: sinon.stub()
+      }
+    })
+
     global.console.error = sinon.stub()
   })
 
   afterEach(function() {
     global.console.error.reset()
-    delete global.localStorage
+    Object.defineProperty(global, 'localStorage', { value: undefined })
   })
 
   it('getItem', function() {