diff --git a/src/store.jsx b/src/store.jsx index 481a4da..538248c 100644 --- a/src/store.jsx +++ b/src/store.jsx @@ -1,8 +1,13 @@ let store; -const noopStore = { - getItem: function () {}, - setItem: function () {}, +const memoryStore = { + values: {}, + getItem: function (key) { + return this.values[key]; + }, + setItem: function (key, value) { + this.values[key] = value; + }, }; if (typeof window !== 'undefined' && 'localStorage' in window) { @@ -10,16 +15,16 @@ if (typeof window !== 'undefined' && 'localStorage' in window) { let key = '__pushtell_react__'; window.localStorage.setItem(key, key); if (window.localStorage.getItem(key) !== key) { - store = noopStore; + store = memoryStore; } else { window.localStorage.removeItem(key); store = window.localStorage; } } catch (e) { - store = noopStore; + store = memoryStore; } } else { - store = noopStore; + store = memoryStore; } export default store; diff --git a/test/browser/store.test.jsx b/test/browser/store.test.jsx new file mode 100644 index 0000000..ee23807 --- /dev/null +++ b/test/browser/store.test.jsx @@ -0,0 +1,18 @@ +describe('Store', () => { + afterEach(() => { + jest.resetModules(); + }); + + it('works with browser storage', () => { + const store = require('../../src/store').default; + store.setItem('foo', 'bar'); + expect(store.getItem('foo')).toEqual('bar'); + }); + + it('works without browser storage', () => { + delete window.localStorage; + const store = require('../../src/store').default; + store.setItem('foo', 'bar'); + expect(store.getItem('foo')).toEqual('bar'); + }); +});