Jest Spyon работает, когда «требуют» смоделированный модуль и не работает, когда «импорт» - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу проверить, что моя функция сторонней библиотеки ( 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 Ответ

0 голосов
/ 20 февраля 2019

Это происходит потому, что макет jest работает только для модулей commonjs, а в вашем случае iframe-resizer не доставляет модули commonjs, а jest не преобразует узлы модулей в commonjs.

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

...