在ase.config.ts中导入JSDOM时出现“数组长度无效错误”

问题描述 投票:0回答:1

我已经将React代码库迁移到Typescript,但在设置Jest时遇到了问题。

[当我尝试对* .test.tsx或.test.jsx文件运行笑话测试时,出现以下错误:

 RangeError: Invalid array length

       6 | 
    >  7 | const { JSDOM } = require('jsdom');
         |         ^

这是我的jest.config.js:

var tsJesUtils = require('ts-jest/utils');
var pathsToModuleNameMapper = tsJesUtils.pathsToModuleNameMapper;

var tsConfig = require('./tsconfig.json');
var compilerOptions = tsConfig.compilerOptions;

module.exports = {
    roots: ["<rootDir>/src/global/ts", "<rootDir>/__tests__"],
    preset: "ts-jest/presets/js-with-ts",
    moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/src/global/ts/' }),
    globals: {
      "ts-jest": {
        diagnostics: {
          warnOnly: true
        }
      },
    },

    transformIgnorePatterns: [
            "node_modules/react-jsx-parser"
    ],

    // Setup Enzyme
    snapshotSerializers: ["enzyme-to-json/serializer"],
    setupFilesAfterEnv: ["<rootDir>/__tests__/enzyme.config.js"],

    collectCoverage: true,
    coverageReporters: [
            "text",
            "json",
            "html"
    ],
};

这是我的酶.config.json文件:

import "raf/polyfill";
import { configure, mount, shallow, render } from 'enzyme';
import Adapter from "enzyme-adapter-react-16";
import React from 'react';

const { JSDOM } = require('jsdom');
const dom = new JSDOM('');

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

有人遇到过这个问题,对此有解决方案吗?

我使用的是最新版本的Enzyme,Jest和JSDOM。谢谢!

reactjs typescript jestjs enzyme jsdom
1个回答
0
投票

此问题是由于JSDOM使用ES6 +功能(在这种情况下,使用Set()引起的,但是我的Typescript编译器使用的是没有Set的默认输出(ES5),导致出现此问题。

因此解决方案是将tsconfig.json中的目标从“ es5”更改为“ es6”。

© www.soinside.com 2019 - 2024. All rights reserved.