Je suis nouveau sur Jasmine et je viens de commencer à l'utiliser. J'ai un fichier de bibliothèque js avec beaucoup de fonctions qui ne sont associées à aucun objet (c'est-à-dire globales). Comment espionner ces fonctions?
J'ai essayé d'utiliser window / document comme objet, mais l'espion ne fonctionnait pas même si la fonction était 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é
la source
test = jasmine.createSpy();
pour espionner angularJs$anchroScroll
fonctionnait parfaitement$window.open(url, '_blank');
avec l'intention d'ouvrir un nouvel onglet (ou une fenêtre selon la configuration du navigateur). Comment dois-je m'assurer qu'il appelle cette fonction et vérifier qu'elle navigue vers la bonne URL quel que soit le navigateur?Utilisateurs de TypeScript:
Je sais que l'OP a posé des questions sur javascript, mais pour tous les utilisateurs de TypeScript qui rencontrent ce problème et qui souhaitent espionner une fonction importée, voici ce que vous pouvez faire.
Dans le fichier de test, convertissez l'importation de la fonction à partir de ceci:
Pour ça:
Ensuite, vous pouvez espionner
FooFunctions.foo
:)la source
export const FooFunctions = { bar, foo };
et que l'importation dans le test devientimport { FooFunctions } from '../foo_functions'.
Cependant, l'alias doit toujours être utilisé explicitement dans l'implémentation privée de foo_functions pour que l'espion fonctionne.const result = FooFunctions.foo(params)
// espion rapporte un appelconst result = foo(params)
// espion rapporte aucun appelError: <spyOn> : parseCookie is not declared writable or has no setter
Il y a 2 alternatives que j'utilise (pour jasmin 2)
Celui-ci n'est pas tout à fait explicite car il semble que la fonction soit en fait un faux.
La seconde plus verbeuse, plus explicite et "plus propre":
-> code source jasmine pour voir le deuxième argument
la source
Une manière très simple:
la source
Cela a fonctionné pour moi.
la source
Ma réponse diffère légèrement de @FlavorScape en ce que j'avais une seule fonction (exportation par défaut) dans le module importé, j'ai fait ce qui suit:
la source