Soy nuevo en Jasmine y acabo de comenzar a usarlo. Tengo un archivo js de biblioteca con muchas funciones que no están asociadas con ningún objeto (es decir, son globales). ¿Cómo hago para espiar estas funciones?
Intenté usar window / document como objeto, pero el espía no funcionó aunque se llamó a la función. También intenté envolverlo en un objeto falso de la siguiente manera:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
y prueba con
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Esto tampoco funciona ya que el espía no funcionó
fuente
test = jasmine.createSpy();
espiar angularJs$anchroScroll
funcionó perfectamente$window.open(url, '_blank');
con la intención de abrir una nueva pestaña (o ventana dependiendo de la configuración del navegador). ¿Cómo debo hacer para asegurarme de que está llamando a esta función y verificar que está navegando a la URL correcta independientemente del navegador?Usuarios de TypeScript:
Sé que el OP preguntó sobre javascript, pero para cualquier usuario de TypeScript que se encuentre con esto y quiera espiar una función importada, esto es lo que puede hacer.
En el archivo de prueba, convierta la importación de la función a partir de esto:
A esto:
Entonces puedes espiar
FooFunctions.foo
:)fuente
export const FooFunctions = { bar, foo };
y la importación en la prueba se convierteimport { FooFunctions } from '../foo_functions'.
Sin embargo, el alias aún debe usarse explícitamente dentro de la implementación privada de foo_functions para que el espía funcione.const result = FooFunctions.foo(params)
// informes de espionaje llamanconst result = foo(params)
// espía reporta ninguna llamadaError: <spyOn> : parseCookie is not declared writable or has no setter
Hay 2 alternativas que uso (para jazmín 2)
Este no es del todo explícito porque parece que la función es realmente falsa.
El segundo más detallado, más explícito y "más limpio":
-> código fuente de jazmín para ver el segundo argumento
fuente
Una forma muy simple:
fuente
Esto funcionó para mí.
fuente
Mi respuesta difiere ligeramente de @FlavorScape en que tenía una sola función (exportación predeterminada) en el módulo importado, hice lo siguiente:
fuente