浅渲染依赖于 TweenLite 的组件

IT技术 reactjs unit-testing jestjs gsap
2022-07-19 01:19:16

我正在尝试使用 React 组件进行简单的单元测试,但我不断得到:

C:\work\portfolio\node_modules\gsap\TweenMax.js:13
    import TweenLite, { TweenPlugin, Ease, Power0, Power1, Power2, Power3, Power4, Linear } from "./TweenLite.js";
           ^^^^^^^^^

这是导入“App”组件第 3 方库之一的错误。

import React from "react";
import { shallow } from 'enzyme';
import App from "./App";

fit("renders without crashing", () => {
  const wrapper = shallow(<App />);
});

应用程序.js

import React from "react";
import "./App.css";
import ChronologyGraph from "./chronology/ChronologyGraph";
import { nodeTypes, milestones } from "../staticData";

const App = () => (
  <ChronologyGraph
    width="700"
    height="800"
    nodeSize={10}
    milestones={milestones.reverse()}
    columns={nodeTypes}
  />
);

export default App;

包.json:

{
  "name": "portfolio",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "font-awesome": "^4.7.0",
    "gsap": "^2.0.1",
    "moment": "^2.22.2",
    "prop-types": "^15.6.2",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-fontawesome": "^1.6.1",
    "react-scripts": "^1.1.5",
    "react-transition-group": "^2.4.0",
    "typeface-lato": "0.0.54",
    "typeface-roboto": "0.0.54",
    "uuid": "^3.3.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "lint": "eslint src",
    "test": "react-scripts test --env=jsdom",
    "testCov": "react-scripts test --env=jsdom --coverage",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "enzyme": "^3.4.4",
    "enzyme-adapter-react-16": "^1.2.0",
    "eslint": "^4.19.1",
    "eslint-config-airbnb": "^17.0.0",
    "eslint-plugin-import": "^2.12.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-react": "^7.9.1",
    "prettier-eslint": "^8.8.2"
  }
}

我在网上找不到任何类似的例子,我应该以某种方式嘲笑孩子的进口吗?我认为“浅”渲染不会导入儿童,因此不会导入儿童

2个回答

(这里是酶维持剂)

第三方module应该在发布前进行转译——因为在 node_modules 上运行 babel 是不安全的,而且 node 不支持import. 您基本上有以下选择:

  1. 提出问题,gsap以便他们正确地转译预发布
  2. 配置 babel 排除 node_modules (默认)但包含这个module
  3. 配置 jest 以模拟gsap其他内容

在@ljharb 第三个选项之后:

如果您阅读Jest 文档__mocks__,您可以简单地模拟 GSAP 在目录中创建文件。

假设您正在导入 TweenMax 并且您想使用to方法:

import { TweenMax } from "gsap/TweenMax";

将两个文件添加到mocks目录中。TweenLite 可以为空。

.
└── __mocks__
    └── gsap
        └── TweenLite.js 
        └── TweenMax.js 
module.exports = {
  TweenMax: class{
    static to(selector, time, options) {
      return jest.fn();
    }
  }
}

你已经成功地模拟了你的TweenMax.to方法。

时间线不同

因为时间线适用于类的实例,所以模拟应该以这种方式完成:

import { TimelineMax } from "gsap/TimelineMax";

同样,将两个文件添加到mocks目录中。TweenLite 可以为空。

.
└── __mocks__
    └── gsap
        └── TweenLite.js 
        └── TimelineMax.js 
module.exports = {
  TimelineMax: class {
    constructor(){
      this.to = jest.fn().mockReturnThis();
    }
  }
};

用于mockReturnThis()能够链接方法。