我想测试一下我的第三方库(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.The测试过了,奇怪的是,当我使用
import * as depModule from 'iframe-resizer';spyon无法工作(测试失败)
但是当我使用
let depModule = require("iframe-resizer")一切都运行得很好(测试通过)。我是jest和节点模块的新手,所以我可能错过了很明显的东西?
发布于 2019-02-21 01:17:00
这是因为jest的模拟只适用于commonjs模块,在您的例子中,iframe-resizer不提供commonjs模块,并且jest不会将节点模块转换为commonjs。
看看this thread吧。这里有很多有趣的解决方案。
https://stackoverflow.com/questions/54789332
复制相似问题