开玩笑测试无法使用create react app和craco导入铯

时间:2019-10-04 17:09:01

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

我正在使用带有craco和craco-铯的create react应用程序将铯加载到我的项目中。我正在尝试设置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 />组件中的其中一个视图中使用以下代码得到了错误:

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;

但是create react app不会拾取此文件,因此我无法尝试验证它是否可以工作。

1 个答案:

答案 0 :(得分:0)

遇到了同样的问题。

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