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.
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);
// ...
});
});