【问题标题】:Unexpected token, expected ";" on import JSON in NodeJS jest testing意外的令牌,应为“;”在 NodeJS 笑话测试中导入 JSON
【发布时间】:2023-03-16 22:27:02
【问题描述】:

我有一个使用 Jest 和 babel 的 NodeJS 项目。 当我运行测试时,我收到以下错误:

FAIL ./user.test.js ● Test suite failed to run. SyntaxError: C:\Users\...\__test__\mocks\registerUser.json: Unexpected token, expected ";" (2:8) 当我将 registerUser.json 更改为 javascript 文件时,我可以毫无问题地检索内容,但是当我尝试使用 JSON 文件时将无法正常工作。 但是在使用 json 文件时,我似乎找不到错误的原因。

我目前的结构是这样的:

|-- src
|-- __test__
     |-- mocks
        |-- registerUser.json
     |-- user.test.js
|-- tmp
.babelrc
.eslintignore
.eslintrc
.gitignore
.prettierrc
jest.config.js
package.json

user.test.js

const userRegisterMock = require('./mocks/registerUser.json');

describe('User', () => {
  it('[SUCCESS] should be able to register', async () => {
    // console.log(userRegisterMock)
    expect(true).toBe(true);
  });
});

jest.config.js

    module.exports = {
      bail: 1,
      testEnvironment: 'node',
      clearMocks: true,
      collectCoverage: true,
      collectCoverageFrom: [
        'src/**',
        '!src/helpers/**',
        '!src/app.js',
        '!src/server.js',
        '!src/database/**',
        '!src/config/**'
      ],
      coverageDirectory: '__tests__/coverage',
      coverageReporters: ['text', 'lcov'],
      coverageThreshold: {
        global: {
          branches: 100,
          functions: 100,
          lines: 100,
          statements: 100
        }
      },
      moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'node'],
      resetModules: false,
      testMatch: ['**/__tests__/**/*.test.js'],
      transform: {
        '.(js|jsx|ts|tsx)': 'babel-jest'
      }
    };

.babelrc

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage", // or "entry"
      "corejs": 3,
      "targets": {
        "node": "current"
      }
    }]
  ],
  "plugins": [
    ["@babel/plugin-transform-modules-commonjs"],
    ["@babel/plugin-transform-runtime", {
      "regenerator": true
    }]
  ]
}

registerUser.json

{
  "name": "Test Case",
  "country": "Brazil",
  "birthdate": "25/03/1994",
  "sex": "Masculino",
  "nationality": "Brasileiro"
}

【问题讨论】:

  • 你的模拟目录不是mock不是mocks吗?
  • 这是一种打字,它是模拟而不是模拟。但错误仍然存​​在!
  • 你玩的是什么版本的玩笑?如果是24.*,则不支持json变换github.com/facebook/jest/issues/8426
  • 我使用的是 25.4.0 版
  • 你能创建一个 GitHub 存储库来重现吗,@bsantoss?

标签: javascript node.js unit-testing jestjs babel-jest


【解决方案1】:

我认为您首先需要做的一件事是在 user.test.js 的第一行添加一个分号。它应该是这样的:

const userRegisterMock = require('./mocks/registerUser.json');

【讨论】:

  • 这不会干扰 jest 编译。
  • 这不会干扰 jest 编译。
【解决方案2】:

您的转换正则表达式包含与 `.json 匹配的 .js

如果您最后添加$,您将只选择以.js 结尾的文件。

transform: {
  '.(js|jsx|ts|tsx)$': 'babel-jest'
}

更好的正则表达式是:'^.+\\.(js|jsx|ts|tsx)$': 'babel-jest'

【讨论】:

  • 而这只是另一件可以用足够的美元解决的事情!哈哈哈
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 2017-11-12
  • 1970-01-01
  • 2021-03-08
  • 2019-04-30
  • 2019-01-14
  • 1970-01-01
  • 2018-04-12
相关资源
最近更新 更多