reactjs jest jQuery 未定义

IT技术 reactjs jestjs babel-jest
2021-05-20 20:45:19

我正在使用 jest 来测试我的 reactJS 组件。在我的 reactJS 组件中,我需要使用 jquery UI,所以我在组件中添加了这个:

var jQuery = require('jquery');
require('jquery-ui/ui/core');
require('jquery-ui/ui/draggable');
require('jquery-ui/ui/resizable');

它工作得很好。但是,现在,我需要使用 jest 进行测试,但是当我将组件加载到 testutils 中时,我立即遇到了这个问题,

Test suite failed to run
ReferenceError: jQuery is not defined 

如果您在应用程序中使用 jQuery,有没有人遇到过这个问题?

谢谢

2个回答

您可以在global对象中添加 jQuery 依赖项请执行下列操作

  1. 在您的package.json, 在jest添加setupFiles这样的 "setupFiles": ["test-env.js"]例如:
{
  "jest": {
    "setupFiles": [ "<rootDir>/tests/test-env.js" ]
  }
}
  1. 哪里的内容test-env.js看起来像这样
import $ from 'jquery';
global.$ = global.jQuery = $;

确保test-env.js从您的根目录开始的路径是正确的。<rootDir>在 Jest 中可用。

如果您使用的是 Jest 27+,则 node 现在是默认的testEnvironment. 如果您需要在 jest 设置脚本中使用 jQuery,请确保首先testEnvironmentjsdom.

jest.config.js

module.exports = {
  setupFilesAfterEnv: ['./jest.setup.js'],
  testEnvironment: 'jsdom'
}

jest.setup.js

import $ from 'jquery';
global.$ = $;
global.jQuery = $;

// If you want to mock bootstrap
global.$.fn.modal = jest.fn(() => $());
global.$.fn.carousel = jest.fn(() => $());
global.$.fn.tooltip = jest.fn(() => $());