tablas - ¿Cómo burlarse del objeto de la ventana de JavaScript usando Jest?
javascript pdf (3)
En lugar de usar window
global
it(''correct url is called'', () => {
global.open = jest.fn();
statementService.openStatementsReport(111);
expect(global.open).toBeCalled();
});
También podrías intentar
const open = jest.fn()
Object.defineProperty(window, ''open'', open);
Necesito probar una función que abre una nueva pestaña en el navegador
openStatementsReport(contactIds) {
window.open(`a_url_${contactIds}`);
}
Me gustaría burlarme de la función de apertura de la ventana para poder verificar que la URL correcta se haya pasado a la función de apertura.
Usando Jest, no sé cómo burlarse de la ventana. Intenté configurar window.open con 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 para el caso de prueba? Cualquier sugerencia o consejo son apreciados.
Puedes probar esto:
import * as _Window from "jsdom/lib/jsdom/browser/Window";
window.open = jest.fn().mockImplementationOnce(() => {
return new _Window({ parsingMode: "html" });
});
it("correct url is called", () => {
statementService.openStatementsReport(111);
expect(window.open).toHaveBeenCalled();
});
También podemos definirlo utilizando global
en setupTests
// setupTests.js
global.open = jest.fn()
Y llámalo usando global
en la prueba real:
// yourtest.test.js
it(''correct url is called'', () => {
statementService.openStatementsReport(111);
expect(global.open).toBeCalled();
});