繁体   English   中英

Jest Spyon在“需要”模拟模块时起作用,而在“导入”时不起作用

[英]Jest spyon works when 'require' mocked module and doesn't work when 'import'

我想测试是否调用了我的第三方库( 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的模拟仅适用于commonjs模块,并且在您的情况下, iframe-resizer resizer不会发布commonjs模块,并且jest不会将节点模块转换为commonjs。

看一下这个线程 那里有许多有趣的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM