Jest Spyon работает, когда "требуют" смоделированный модуль и не работает, когда "импорт"
Я хочу проверить, что моя функция сторонней библиотеки ( iframe-resizer) вызывается. Мой тест
import React from 'react';
import { fireEvent, render } from 'react-testing-library';
//import * as depModule from 'iframe-resizer';
let depModule = require("iframe-resizer")
import { MyComponent } from '../my-component';
describe('Component', () => {
describe('Functional', () => {
it('should initialize iframeresizer when the iframe has loaded', async
() => {
const iframeResizerMock = jest.spyOn(depModule, "iframeResizer");
const { queryByTestId } = render(<MyComponent />);
fireEvent.load(queryByTestId('csb-iframe'));
expect(iframeResizerMock).toHaveBeenCalledTimes(1);
});
});
});
Таким образом, вызывается функция iframeResizer, она была проверена console.log. Странная вещь здесь, когда я использую
import * as depModule from 'iframe-resizer';
Шпион не работает (тест не пройден)
Но когда я использую
let depModule = require("iframe-resizer")
Все отлично работает (тесты пройдены). Я новичок в модулях jest и node, так что, может быть, я пропустил что-то очевидное?
1 ответ
Это происходит потому, что шутка Jest работает только для модулей Commonjs, и в вашем случае iframe-resizer
не доставляет модули commonjs, а jest не преобразует модули узлов в commonjs.
Посмотрите на эту тему. Там есть много интересных решений.