2

我想测试我的第三方库(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 模块的新手,所以我可能错过了一些明显的东西吗?

4

1 回答 1

1

发生这种情况是因为 jest 的模拟仅适用于 commonjs 模块,并且在您的情况下iframe-resizer不提供 commonjs 模块,并且 jest 不会将节点模块转换为 commonjs。

看看这个线程。里面有很多有趣的解决方案。

于 2019-02-20T17:17:00.317 回答