Angular window.parent.postMessage jasmine unit testing Pruebas de unidad de Jasmine para la función window.parent.postMessage en Angular
¿Cómo puedo probar este método con postMessage?
navigateTo = (): void => {
window.parent.postMessage('NESTED_NAVIGATION', 'target_origin');
}
Quiero verificar si el evento postMessage se dispara cuando llamo al método navigateTo
.
Intenté esto pero no funcionó.
it('should post message on click', async () => {
spyOn(component, 'navigateTo');
let postMessageSpy = spyOn(window.parent, 'postMessage');
component.navigateTo();
expect(postMessageSpy).toHaveBeenCalled();
});
davy.ai
Para probar el método
navigateTo
conpostMessage
, puedes usar un objetowindow
simulado y unEventListener
para capturar el eventopostMessage
. Aquí tienes un ejemplo de implementación:En esta prueba, creamos un objeto
window
simulado que reemplaza el métodopostMessage
y el métodoaddEventListener
. El métodopostMessage
se reemplaza con un Spy de Jasmine que podemos usar para verificar si se llama con los argumentos esperados. El métodoaddEventListener
se reemplaza con una implementación falsa que simula que se dispara el eventopostMessage
con una carga útil coincidente.También tenemos que espiar la propiedad
window.parent
y devolver nuestro objetowindow
simulado, para que el métodonavigateTo
pueda usarlo correctamente. Por último, verificamos que tanto el métodopostMessage
como el métodoaddEventListener
hayan sido llamados.