186 votes

Utiliser Jasmine pour espionner une fonction sans objet

Je ne connais pas le jasmin et je viens de commencer à l'utiliser. J'ai un fichier de bibliothèque js avec beaucoup de fonctions qui ne sont pas associées à un objet (c'est-à-dire qu'elles sont globales). Comment dois-je procéder pour espionner ces fonctions ?

J'ai essayé d'utiliser window/document comme objet, mais l'espion ne fonctionne pas, même si la fonction a été appelée. J'ai également essayé de l'envelopper dans un faux objet comme suit :

var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");

et tester avec

expect(fakeElement.fakeMethod).toHaveBeenCalled();

Cela ne fonctionne pas non plus car l'espion n'a pas fonctionné.

1voto

AkshAy Agrawal Points 115

L'approche que nous suivons habituellement est la suivante :

utils.ts pour tous les utilitaires globaux :

function globalUtil() {
  // some code
}

abc.component.ts :

function foo {
  // some code
  globalUtil();  // calls global function from util.ts
}

En écrivant un test Jasmine pour function foo () vous pouvez espionner la fonction globalUtil comme suit :

abc.component.spec.ts :

import * as SharedUtilities from 'util.ts';

it('foo', () =>
{
  const globalUtilSpy = jasmine.createSpy('globalUtilSpy');
  spyOnProperty(SharedUtilities, "globalUtilSpy").and.returnValue(globalUtilSpy);

  foo();
  expect(globalUtilSpy).toHaveBeenCalled();
});

0voto

HappyHamburger Points 49

Ma réponse diffère légèrement de celle de @FlavorScape dans la mesure où j'avais une seule fonction (export par défaut) dans le module importé, j'ai fait ce qui suit :

import * as functionToTest from 'whatever-lib';

const fooSpy = spyOn(functionToTest, 'default');

-1voto

Ludwig Points 161

Je suppose que c'est le moyen le plus facile :

const funcSpy = spyOn(myFunc, 'call');

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