9 votes

Erreur Jest lors de la définition ou de l'affectation de window.location

Mise à jour de la bibliothèque Jest sur la version 25 et tous les tests unitaires qui vérifiaient le changement d'emplacement échouent.

J'ai vérifié quelques questions ouvertes sur la plaisanterie. repo mais je n'ai pas vraiment compris comment cela peut être réparé.

Le code qui appelle location.assign se brise avec l'erreur suivante :

Error: Not implemented: navigation (except hash changes)

      69 |     // window.location.href = url;
    > 70 |     window.location.assign(url);

Je suppose que l'objet fenêtre de Jest jsdom ne devrait plus être traité comme une vraie fenêtre de navigateur en ce qui concerne le changement d'emplacement.

Une suggestion ?


Je vais ajouter mes conclusions ici :

  • La navigation dans les tests ne fonctionne pas. Toutes ces méthodes qui fonctionnent dans le navigateur ne sont pas implémentées dans la fenêtre JSDom :
    • window.location.href = "https://myapp.com"
    • window.location.assign("https://myapp.com")
    • window.location.replace("https://myapp.com")
    • Object.defineProperty(window.location, "href", { writable: true, value: currentUrl }); window.location has been set as Incroyable

Pour corriger les tests défaillants, j'ai utilisé :

  1. window.history.pushState({}, "title", "/testJest");
  2. delete window.location; window.location = { assign: jest.fn() };

    it("should navigate to the new URL", () => { const myUrl = "http://some.url"; expect(window.location.assign).toHaveBeenCalledWith(myUrl); });

2voto

Yalung Tang Points 480

Pour faire court, "global" est "fenêtre" en Jest.

Utilisez :

global.location.assign(url);

Je pense que vous pouvez trouver le reste de la réponse ici :

Comment simuler l'objet fenêtre JavaScript à l'aide de Jest ?

De plus, il y a une conversation intéressante autour de cette question :

https://github.com/facebook/jest/issues/3692

J'espère que cela résout votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X