web-dev-qa-db-fra.com

JSDom 11.12.0 - Comment se moquer de LocalStorage?

Depuis la dernière version de JSDom, je ne peux plus me moquer de localStorage.

J'ai essayé les méthodes suivantes:

  1. Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
  2. window.localStorage = LocalStorageMock;
  3. 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.

5
felixmosh

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.

3
DuncanBb

setItemSpy = jest.spyOn(Storage.prototype, 'setItem'); travaille pour moi.

Vu ce correctif ici: https://github.com/facebook/jest/issues/6858#issuecomment-413677180

2

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é.

1
Elliot B.