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.

Посмотрите на эту тему. Там есть много интересных решений.

Другие вопросы по тегам