【问题标题】:Jest didn't parse to import a fileJest 没有解析导入文件
【发布时间】:2020-06-24 14:22:50
【问题描述】:

我正在尝试使用 Jest 和 Enzyme 测试我的 Next.js 项目。当我尝试从我的组件中导入一个文件来测试它时,虽然会抛出错误。这是我的文件...

在 package.json 中我开玩笑的配置是:

 "jest": {
"setupFilesAfterEnv": "<rootDir>/jest.setup.js",
"testPathIgnorePatterns": [
  "<rootDir>/.next/",
  "<rootDir>/node_modules/"
],
"transform": {
  "\\.(gql|graphql)$": "jest-transform-graphql",
  ".*": "babel-jest",
  "^.+\\.js?$": "babel-jest"
}


 },

  "//": "I prefer this over a .babelrc file",
  "babel": {
    "env": {
      "development": {
        "presets": [
          "next/babel"
        ],
        "plugins": [
          [
            "styled-components",
            {
              "ssr": true,
              "displayName": true
            }
          ]
        ]
      },
      "production": {
        "presets": [
          "next/babel"
        ],
        "plugins": [
          [
            "styled-components",
            {
              "ssr": true,
              "displayName": true
            }
          ]
        ]
      },
      "test": {
        "presets": [
          [
            "next/babel",
            {
              "preset-env": {
                "modules": "commonjs"
              }
            }
          ]
        ],
        "plugins": [
          [
            "styled-components",
            {
              "ssr": true,
              "displayName": true
            }
          ]
        ]
      }
    }
  }

随后在 jest.setup.js 中:

import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });

但是,每当我想**导入文件时,我总是会遇到此错误 **(例如,在这里我尝试导入一个文件,即“import ItemComponent from '../components/Item ';"):

Jest 遇到了意外的令牌

这通常意味着您正在尝试导入 Jest 的文件 无法解析,例如它不是纯 JavaScript。

默认情况下,如果 Jest 看到 Babel 配置,它将使用它来转换 您的文件,忽略“node_modules”。语法错误:意外 标识符

详情:

SyntaxError: C:\Users\Welcome\Desktop\Advanced-React-master\sick-fits\frontend\__tests__\Item.test.js: Unexpected token (20:28)

  18 | describe('<Item/>', () => {
  19 |   it('renders and matches the snapshot', () => {
> 20 |     const wrapper = shallow(<ItemComponent item={fakeItem} />);
     |                             ^
  21 |     expect(wrapper).toMatchSnapshot();
  22 |   });
  23 |   // it('renders and displays properly', () => {

  at Parser.raise (node_modules/@babel/parser/lib/index.js:3939:15)
  at Parser.unexpected (node_modules/@babel/parser/lib/index.js:5248:16)
  at Parser.parseExprAtom (node_modules/@babel/parser/lib/index.js:6328:20)
  at Parser.parseExprSubscripts (node_modules/@babel/parser/lib/index.js:5924:21)
  at Parser.parseMaybeUnary (node_modules/@babel/parser/lib/index.js:5903:21)
  at Parser.parseExprOps (node_modules/@babel/parser/lib/index.js:5812:21)
  at Parser.parseMaybeConditional (node_modules/@babel/parser/lib/index.js:5784:21)
  at Parser.parseMaybeAssign (node_modules/@babel/parser/lib/index.js:5731:21)
  at Parser.parseExprListItem (node_modules/@babel/parser/lib/index.js:6995:18)
  at Parser.parseCallExpressionArguments (node_modules/@babel/parser/lib/index.js:6124:22)

任何帮助将不胜感激

【问题讨论】:

    标签: jestjs enzyme next.js


    【解决方案1】:

    尝试从您的package.json 中删除这两行:

      ".*": "babel-jest",
      "^.+\\.js?$": "babel-jest"
    

    理论上,这些是不需要的:https://jestjs.io/docs/en/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object

    您添加的自定义配置可能会导致问题。理论上,jest 应该默认使用babel-jest 转换您的js 文件。我当然有一个最近的 NextJS 项目与 jest 合作,在我的 package.json 中没有声明 babel-jest 配置。

    【讨论】:

    • 我尝试在我的 package.json 中省略这两行,但这并没有解决问题,上面的错误仍然是一样的..
    • 好的,我确定这是你的 babel 配置。在 package.json 中的 babel 配置的 "test" 部分下,尝试将其设置为 "presets": ["next/babel"]。我有一个 babel.config.js 文件的工作测试,只有 module.exports = { presets: ['next/babel'] };。为我删除该声明会给我带来与您完全相同的错误。 nextjs.org/docs/advanced-features/customizing-babel-config 你不应该自定义 babel 配置 - 你只需要让它使用 Next 的默认 babel 配置。
    • 我也遇到了很多问题——为了让一切正常工作付出了很多痛苦和努力。如果一切都失败了,你可以在这里使用我的实现作为参考:github.com/Yorkshireman/github-api-nextjs
    • 谢谢,已解决。虽然如果我只设置 babel 测试用例内部的内容是行不通的,但也必须删除所有“env”、“production”和“test”的用例。另一件奇怪的事情是它无法识别文件 jest.setup.js 中的配置,我必须在每个 test.js 文件中重新输入它们。
    • 谢谢,已解决。虽然如果我只设置 babel 的“test” case 里面的内容是行不通的,但还必须删除“env”、“production”和“test”的所有 case。另一件奇怪的事情是它无法识别文件 jest.setup.js 中的配置,因此我必须在每个 test.js 文件中分配那些必须调用酶的配置...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2019-12-09
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2018-09-11
    • 2018-02-03
    相关资源
    最近更新 更多