【问题标题】:Jest spyon works when 'require' mocked module and doesn't work when 'import'Jest spyon 在“require”模拟模块时有效,而在“import”时无效
【发布时间】:2019-07-14 07:40:01
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js reactjs jestjs iframe-resizer


    【解决方案1】:

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

    看看this thread。里面有很多有趣的解决方案。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2017-01-30
      • 2017-08-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多