Ошибка "недопустимая длина массива" при импорте JSDOM в энзиме. - PullRequest
0 голосов
/ 20 апреля 2020

Я перенес кодовую базу React в Typescript, и у меня возникают проблемы с настройкой Jest.

Когда я пытаюсь запустить тест 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 file:

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, все последние версии. Спасибо!

1 Ответ

0 голосов
/ 21 апреля 2020

Проблема была вызвана тем, что JSDOM использует функции ES6 + (в данном конкретном случае, используя Set ()), но мой компилятор Typescript использовал вывод по умолчанию (ES5), который не имеет Set.

Таким образом, решение состоит в том, чтобы изменить цель в tsconfig. json с "es5" на "es6" и далее.

...