reactjs - Jest 测试无法使用 create react app 和 craco 导入铯

标签 reactjs jestjs create-react-app cesiumjs craco

我正在使用 create react app with craco 和 craco-cesium 将铯加载到我的项目中。我正在尝试设置 jest 以开始创建测试,但问题是 Cesium 正在使用 requireJS。

我将以下内容添加到我的 package.json

  // package.json

  ...
  "jest": {
    "collectCoverageFrom": [
      "src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts"
    ],

    "globalSetup": "<rootDir>/setupTests.js"
  }
  ...

基于此处打开的工单:https://github.com/facebook/jest/issues/1914

我设置了 setupTests.js使用以下代码:

// setupTests.js
module.exports = async () => {
  var cesium = require('cesium');
  process.$Cesium = cesium
};

我有第一个有效渲染的基本测试:

// App.test.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

it('renders without crashing', () => {
  const div = document.createElement('div');
  ReactDOM.render(<App />, div);
  ReactDOM.unmountComponentAtNode(div);
});

但是我在 <App /> 中的一个 View 中发现了错误具有以下代码的组件:

import Cesium from "cesium";
...
TypeError: Cannot read property 'Ion' of undefined
...
Cesium.Ion.defaultAccessToken = '...';

在调用它的函数时将 Cesium 报告为未定义。我尝试使用 jest.config.js为了开 Jest ,使用以下代码从那里获取配置:

// jest.config.js
const { createJestConfig } = require("@craco/craco");

const cracoConfig = require("../craco.config.js");
const jestConfig = createJestConfig(cracoConfig);

module.exports = jestConfig;

但是 create react app 没有获取这个文件,所以我无法尝试验证这是否可行。

最佳答案

遇到了同样的问题。

react-scripts 升级到 4.0.1 版,将 @craco/craco@ 升级到 6.0.0 版,似乎解决了这些问题,jest 现在可以识别所有来自 cesium 的导入。不需要其他配置文件。

关于reactjs - Jest 测试无法使用 create react app 和 craco 导入铯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58240619/

相关文章:

javascript - 如何根据 JSON 文件中的 bool 值自动添加过滤器

javascript - 如何避免 React 应用程序中的全局状态?

javascript - 放大图像同时保持鼠标悬停尺寸的 React 组件 - React + Bootstrap

typescript - 我如何使用 Typescript 模拟 Express Request、Response 和 NextFunction 对象

node.js - 使用 TFS 2015 运行 Jest 单元测试

typescript - 如何使用 TS 配置 CRA 以支持 nullish-coalescing-operator

create-react-app 忽略了 yarn 的注册表配置值

javascript - 在 ReactJS 中安排 API 调用

reactjs - 开 Jest 抛出 TypeError : Cannot read property 'fetch' of undefined

reactjs - 我应该如何配置 create-react-app 以从子目录提供应用程序?