web-dev-qa-db-fra.com

Comment se moquer de window.location.href avec Jest + Vuejs?

Actuellement, j'implémente le test unitaire pour mon projet et il existe un fichier contenant window.location.href.

Je veux me moquer de cela pour tester et voici mon exemple de code:

it("method A should work correctly", () => {
      const url = "http://dummy.com";
      Object.defineProperty(window.location, "href", {
        value: url,
        writable: true
      });
      const data = {
        id: "123",
        name: null
      };
      window.location.href = url;
      wrapper.vm.methodA(data);
      expect(window.location.href).toEqual(url);
    });

Mais je reçois cette erreur:

TypeError: Cannot redefine property: href
        at Function.defineProperty (<anonymous>)

J'avais essayé quelques solutions mais je ne les ai pas résolues. J'ai besoin de quelques conseils pour m'aider à sortir de ce problème. Aide Plz.

29
Hoang Tran Son

De nombreux exemples fournis ne se moquent pas des propriétés de l'objet Location d'origine.

Ce que je fais, c'est simplement remplacer l'objet Location (window.location) par URL, car l'URL contient les mêmes propriétés que l'objet Location comme "href", "search", "hash", "Host".

Les Setters et Getters fonctionnent également exactement comme l'objet Location.

Exemple:

const realLocation = window.location;

describe('My test', () => {

    afterEach(() => {
        window.location = realLocation;
    });

    test('My test func', () => {

        // @ts-ignore
        delete window.location;

        // @ts-ignore
        window.location = new URL('http://google.com');

        console.log(window.location.href);

        // ...
    });
});
0
Juan Lago