【问题标题】:Jest/Enzyme with create-react-app Unexpected tokenJest/Enzyme 与 create-react-app 意外令牌
【发布时间】:2021-10-15 00:29:33
【问题描述】:

我在尝试对 CRA 应用内的组件运行测试时遇到问题。我是 Jest/Enzyme 的新手,并且在我专门为学习单元测试而创建的一个 CRA 应用程序中运行了非常相似的测试,但是当我尝试将它集成到现有项目中时,我收到了这个错误:

SyntaxError: /Users/dave/Teacher_App/client_teacher/App.test.js: Unexpected token (12:20)

  10 | 
  11 |   beforeEach(() => {
> 12 |     wrapper = mount(<App />)
     |                     ^
  13 |     console.log(wrapper.debug()) 
  14 |   })
  15 | 

我已经尝试了终端中提供的建议,并在这里阅读了许多其他帖子的相同问题的答案,但似乎没有任何效果!

这是我的 ./setupTests.js 的内容

import '@testing-library/jest-dom';
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });

和./App.test.js

import App from './App';
import React from 'react';

import { mount } from 'enzyme';


describe('counter testing', () => {

  let wrapper ;

  beforeEach(() => {
    wrapper = mount(<App />)
    console.log(wrapper.debug())
  })

  test('renders the title of the dash', () => {
    
    expect(wrapper.find('h1').text()).toContain("Dashboard")

  });

})

还有我的 package.json(这是一个非常大的应用程序!)

{
  "name": "app-schools",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@babel/preset-env": "^7.15.8",
    "@babel/preset-react": "^7.14.5",
    "@fortawesome/fontawesome-svg-core": "^1.2.30",
    "@fortawesome/free-brands-svg-icons": "^5.14.0",
    "@fortawesome/free-regular-svg-icons": "^5.14.0",
    "@fortawesome/free-solid-svg-icons": "^5.14.0",
    "@fortawesome/react-fontawesome": "^0.1.11",
    "@fullcalendar/daygrid": "^5.3.2",
    "@fullcalendar/react": "^5.3.1",
    "@rails/actioncable": "^6.0.3-4",
    "@react-pdf/renderer": "^1.6.14",
    "@stripe/react-stripe-js": "^1.1.2",
    "@stripe/stripe-js": "^1.9.0",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "@use-hooks/image-size": "^1.0.5",
    "axios": "^0.19.2",
    "babel-jest": "^27.2.5",
    "crossfilter2": "^1.4.7",
    "d3": "^5.16.0",
    "date-fns": "^2.23.0",
    "dc": "^3.2.1",
    "dompurify": "^2.3.3",
    "downloadjs": "^1.4.7",
    "enzyme": "^3.11.0",
    "enzyme-adapter-react-16": "^1.15.6",
    "glamor": "^2.20.40",
    "google-classroom-share": "^0.5.4",
    "googleapis": "^39.2.0",
    "jest": "^27.2.5",
    "jwt-decode": "^3.1.2",
    "loadash": "^1.0.0",
    "node-sass": "^4.14.1",
    "query-string": "^7.0.0",
    "react": "^16.13.1",
    "react-country-region-selector": "^3.0.2",
    "react-countup": "^4.3.3",
    "react-datepicker": "^3.0.0",
    "react-dom": "^16.13.1",
    "react-draggable": "^4.4.3",
    "react-elastic-carousel": "^0.7.4",
    "react-flexbox-grid": "^2.1.2",
    "react-flip-page": "^1.6.4",
    "react-ga": "^3.3.0",
    "react-google-picker": "^0.1.0",
    "react-helmet": "^6.1.0",
    "react-load-script": "0.0.6",
    "react-masonry-css": "^1.0.14",
    "react-modern-calendar-datepicker": "^3.1.6",
    "react-player": "^2.7.0",
    "react-quill": "^1.3.5",
    "react-redux": "^7.2.0",
    "react-router-dom": "^5.2.0",
    "react-router-redux": "^4.0.8",
    "react-script-tag": "^1.1.2",
    "react-scripts": "3.4.1",
    "react-select": "^3.1.0",
    "react-share": "^4.2.1",
    "react-swipeable": "^5.5.1",
    "react-test-renderer": "^17.0.2",
    "redux": "^4.0.5",
    "redux-persist": "^6.0.0",
    "redux-thunk": "^2.3.0",
    "styled-components": "^5.1.1",
    "typography": "^0.16.19",
    "typography-theme-funston": "^0.16.19"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "jest",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

这是 App.jsx 组件的内容,在尝试调试时被剥离:

import React from 'react';


const App = () => {

  return (
    <div>
      <h1>Dashboard</h1>
    </div>
  )

}

export default App;

我假设我在某处遗漏了一些设置。这是一个非弹出的 CRA 应用,所以我无法修改 babel 配置文件。

任何帮助将不胜感激!

【问题讨论】:

  • 你能把App组件的代码也发一下吗?谢谢
  • 嗨@axel,我已将其添加到帖子中。

标签: reactjs unit-testing jestjs create-react-app enzyme


【解决方案1】:

您的文件扩展名似乎不正确,因此在确认您的文件中有 jsx 时出现问题。将App.test.js 的文件扩展名更改为App.test.jsx

我还建议放弃 React 测试库的酶,因为您使用的是 DOM 测试库。 Enzyme 正在进入一种状态,即较新版本的 React 将需要第三方适配器,当您最终想要升级到 16 版以上时,这会很尴尬。

【讨论】:

  • 您好,感谢您的快速回复。不幸的是,更改扩展没有效果 :( 感谢有关 React 测试库的建议,也许我会试一试。
  • @DaveClydesdale 你有可用的代码吗? :) 我们可以看看你的 babel 文件吗
  • 嘿@Win,因为这是一个非弹出的 CRA 应用程序,我无权访问 babel 配置。只是 package.json
  • @DaveClydesdale 嗯,这有点难以解决,因为我想检查是否安装了 babel transform jsx 插件,你有不和谐的地方我可以提供帮助吗?
  • 不幸的是我没有! :( 我看到调试是一个巨大的痛苦,我非常感谢你的努力。
猜你喜欢
  • 2019-08-24
  • 2019-02-28
  • 2021-08-11
  • 2019-09-26
  • 2018-08-04
  • 2018-01-21
  • 2020-03-03
  • 2018-10-09
  • 2017-05-24
相关资源
最近更新 更多