javascript - 在 Javascript 中使用 Jest 模拟整个模块

标签 javascript jestjs

我搜索了很长时间如何用 jest 模拟任何模块(就像 rewire 那样)。我终于设法做到了这一点,而且效果很好:

jest.mock('common/js/browser-utils', () => ({
    openBrowser: jest.fn()
}));
const { openBrowser: openBrowserSpy } = jest.requireMock(
    'common/js/browser-utils'
);

但我想知道是否有另一种快速方法可以做到这一点? 我看到了 genMockFromModule 方法,但我从来没有让它工作(也许它不适合这种用法。)

我想要的很简单:通过 jest.fn()(或任何自动机制)模拟一个模块,然后能够在我的测试中访问这个 jest.fn()(这里: openBrowserSpy) 对其expect(assertions)

最佳答案

您可以使用 jest.mock 自动模拟模块:

jest.mock('common/js/browser-utils');

可以通过更好地描述“自动模拟版本”的含义来改进文档,但实际情况是 Jest 保持模块的 API 表面不变,同时将实现替换为空 mock functions .

完整示例

浏览器-utils.js

export const openBrowser = () => { /* do something */ };

代码.js

import { openBrowser } from './browser-utils';

export const func = () => {
  /* do stuff */
  openBrowser();
  /* do other stuff */
}

代码.test.js

jest.mock('./browser-utils');  // create an auto-mock of the module

import { openBrowser } from './browser-utils';  // openBrowser is already an empty mock function
import { func } from './code';

test('func', () => {
  func();
  expect(openBrowser).toHaveBeenCalled();  // Success!
});

奖励:模拟单一功能

要模拟单个函数,您可以像这样使用 jest.spyOn:

import * as browserUtils from './browser-utils';
import { func } from './code';

test('func', () => {
  const spy = jest.spyOn(browserUtils, 'openBrowser');
  spy.mockImplementation();  // replace implementation with empty mock function (optional)
  func();
  expect(spy).toHaveBeenCalled();  // Success!
});

关于javascript - 在 Javascript 中使用 Jest 模拟整个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198790/

相关文章:

node.js - Jest 测试失败时如何打印请求和响应?

javascript - 错误 'undefined' 为 null 或不是 Internet Explorer 中的对象

javascript - 在 iOS 全屏网络应用程序中禁用橡皮筋

typescript - 在 Nestjs 中用 Jest 手动模拟不起作用

javascript - expect.anything() 不适用于 expect.toBe()

reactjs - 用 enzyme 测试时如何等待componentDidMount中的setState解决?

reactjs - enzyme shallowWrapper.setState 不适用于redux 连接组件

Javascript:通过以编程方式设置值来触发 onChange

javascript - 用 ajax 响应的值替换文本区域中的字符串

javascript - 难以在 JavaScript 中实现简化的借用检查器