Depuis la dernière version de JSDom, je ne peux plus me moquer de localStorage
.
J'ai essayé les méthodes suivantes:
Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
window.localStorage = LocalStorageMock;
jest.spyOn(window.localStorage, 'setItem')
N'importe laquelle de ces méthodes ne fonctionne pas pour moi, j'ai tout le temps l'original localStorage
.
En fait, j’ai rencontré le même problème lors de la mise à jour de Jest, je ne sais pas si c’est ce qui vous est arrivé, mais j’ai trouvé ce correctif ici: https://github.com/facebook/jest/issues/6766
De OlivierB-OB:
Pour résoudre temporairement ce problème, vous pouvez installer jsdom "11.11.0" (exact) en tant que dépendance de développement dans votre paquet. jest-environment-jsdom devrait alors utiliser cette version au lieu du dernier "11.12.0" à l'origine du comportement.
Après cela, je me suis moqué du stockage local dans la configuration du test et l'espionnage était revenu à la normale.
Et une implémentation de localstorage mock: https://github.com/facebook/jest/issues/2098 Manque removeItem cependant, vous aurez peut-être besoin de l'ajouter.
setItemSpy = jest.spyOn(Storage.prototype, 'setItem');
travaille pour moi.
Vu ce correctif ici: https://github.com/facebook/jest/issues/6858#issuecomment-413677180
Vous pouvez utiliser le paquetdom-storagedisponible via npm:
const Storage = require('dom-storage');
global.localStorage = new Storage(null, { strict: true });
global.sessionStorage = new Storage(null, { strict: true });
Nous utilisons la dernière version de jsdom
pour nos tests unitaires et la méthode ci-dessus a très bien fonctionné.