【问题标题】:jest test cannot import cesium using create react app and craco开玩笑测试无法使用 create react app 和 craco 导入铯
【发布时间】:2020-02-03 00:59:25
【问题描述】:

我正在使用带有 craco 和 craco-cesium 的 create react app 将 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);
});

但是,我在 &lt;App /&gt; 组件中的一个视图中遇到错误,代码如下:

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

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

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

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

module.exports = jestConfig;

但创建反应应用程序不会获取此文件,因此我无法尝试验证这是否可行。

【问题讨论】:

    标签: reactjs jestjs create-react-app cesium craco


    【解决方案1】:

    遇到了同样的问题。

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

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2018-07-27
      • 2017-06-13
      • 2018-08-04
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多