[英]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.