Since the latest release of JSDom, I'm not able to mock localStorage
anymore.
I've tried the following methods:
Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
window.localStorage = LocalStorageMock;
jest.spyOn(window.localStorage, 'setItem')
Any of those methods not worked for me, I get always the original localStorage
.
You can mock localStorage globally for React in Jest by adding the above to the setupTests. js file and adding global. localStorage under the function.
First of all, we need to check whether the Local Storage is used. Using Google Chrome, click on menu -> Tools -> Developer Tools. Then under Resources you will see 'Local Storage' and 'Web Storage'. Using Firefox with the Firebug add on you can easily inspect the localStorage/sessionStorage object in the DOM tab.
The removeItem() method removes the specified Storage Object item. The removeItem() method belongs to the Storage Object, which can be either a localStorage object or a sessionStorrage object.
setItemSpy = jest.spyOn(Storage.prototype, 'setItem');
works for me.
Saw this fix here: https://github.com/facebook/jest/issues/6858#issuecomment-413677180
I actually ran into this same issue when updating Jest, not sure if that's what happened to you but I found this fix here: https://github.com/facebook/jest/issues/6766
From OlivierB-OB:
As a temporary workaround you can install jsdom "11.11.0" (exact) as a dev-dependency in your package. jest-environment-jsdom should then use this version instead of the lastest "11.12.0" causing the behavior. Cheers!
After that I mocked localstorage in test setup and spying was back to normal.
And an implementation of localstorage mock: https://github.com/facebook/jest/issues/2098 lacks removeItem though, so you might need to add it.
You can use the dom-storage package available via npm:
const Storage = require('dom-storage');
global.localStorage = new Storage(null, { strict: true });
global.sessionStorage = new Storage(null, { strict: true });
We use the latest release of jsdom
for our unit tests and the above method has worked great.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With