GOOGLE ADS

martes, 26 de abril de 2022

¿Cómo puedo simular el objeto de la ventana de JavaScript usando Jest?

Necesito probar una función que abre una nueva pestaña en el navegador

openStatementsReport(contactIds) {
window.open(`a_url_${contactIds}`);
}

Me gustaría simular la openfunción de la ventana para poder verificar que se pasa la URL correcta a la openfunción.

Usando Jest, no sé cómo burlarme de window. Traté de configurar window.opencon una función simulada pero de esta manera no funciona. A continuación se muestra el caso de prueba

it('correct url is called', () => {
window.open = jest.fn();
statementService.openStatementsReport(111);
expect(window.open).toBeCalled();
});

pero me da el error

expect(jest.fn())[.not].toBeCalled()
jest.fn() value must be a mock function or spy.
Received:
function: [Function anonymous]

¿Qué debo hacer con el caso de prueba?


Solución del problema

El siguiente método funcionó para mí. Este enfoque me permitió probar un código que debería funcionar tanto en el navegador como en Node.js, ya que me permitió windowconfigurar undefined.

Esto fue con Jest 24.8 (creo):

let windowSpy;
beforeEach(() => {
windowSpy = jest.spyOn(window, "window", "get");
});
afterEach(() => {
windowSpy.mockRestore();
});
it('should return https://example.com', () => {
windowSpy.mockImplementation(() => ({
location: {
origin: "https://example.com"
}
}));
expect(window.location.origin).toEqual("https://example.com");
});
it('should be undefined.', () => {
windowSpy.mockImplementation(() => undefined);
expect(window).toBeUndefined();
});

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...