在NodeJS jest测试中导入JSON时出现“Unexpected token, expected ';'”错误

4

我有一个使用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"
}

你的模拟目录不是mocks,而是mock,对吗? - trmaphi
这是一个打字错误,应该使用mocks而不是mock。但错误仍然存在! - bsantoss
你使用的jest版本是多少?如果是24.*,则不支持json转换 https://github.com/facebook/jest/issues/8426 - trmaphi
我正在使用版本25.4.0。 - bsantoss
你能否创建一个GitHub存储库来重现,@bsantoss? - trmaphi
3个回答

1
你的转换正则表达式包含.js,它会匹配`.json`。
如果在结尾加上$,你将只选择以.js结尾的文件。
transform: {
  '.(js|jsx|ts|tsx)$': 'babel-jest'
}

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


这只是另一件可以用足够的$解决的事情!哈哈哈 - Andre Goulart

0

0

我认为你需要做的第一件事是在user.test.js的顶部行添加一个分号。它应该看起来像这样:

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

这不会干扰Jest编译。 - bsantoss
这不会干扰Jest编译。 - Ramana V V K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接