javascript - Jest: SyntaxError: Neočakávaný token export


Keď spustím svoj test Jasmine s Jest, dostanem chybu:

G:\git\diamant\SpaUI\node_modules\linqts\dist\src\index.js:10
    export { default as List } from './list';
    ^^^^^^

    SyntaxError: Unexpected token export

    > 1 | import { List } from 'linqts';
        | ^
      2 | import { ReportMessageData } from './../models/report.model';
      3 | import { TranslateService } from '@ngx-translate/core';
      4 | import { Injectable } from '@angular/core';

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1350:14)
      at Object.<anonymous> (src/app/feature-modules/report/services/report-message-flatten.service.ts:1:1)

Chápem, že musím povedať Jestu, aby transformoval kód na obyčajný JavaScript, ale neviem, ako to urobiť. Môj jest.config.js vyzerá nasledovne:

var preset = require("jest-preset-angular/jest-preset");
module.exports = {
    ...preset,
    preset: "jest-preset-angular",
    transformIgnorePatterns: ["<rootDir>/node_modules/(?!linqts)"],
    testMatch: ["**/*.test.ts"],
    globals: {
        ...preset.globals,
        "ts-jest": {
            ...preset.globals["ts-jest"],
            tsConfig: "src/tsconfig.test.json",
            isolatedModules: true
        }
    },
    moduleNameMapper: {
        '^@diamant/feature-modules(.*)$': '<rootDir>/src/app/feature-modules/$1',
    }
};

Odpoveď č. 1

Jest nepodporuje ES6 modul a preto pri priamom spustení testu s Jest ho vyhodí túto chybu. Ak chcete spustiť test takto, musíte pridať Babel.

V novejšej verzii Jest je babel-jest teraz automaticky načítaný Jestom a je plne integrovaný

Dúfam, že to odpovedá na tvoju otázku.

Pridanie Babelu do Jest.

Inštalácia
babel-jest je teraz automaticky načítaný pomocou Jest a je plne integrovaný. Tento krok je potrebný iba v prípade, že používate babel-jest na transformáciu súborov TypeScript.

npm install --save-dev babel-jest

Použitie

Vo vašom súbore package.json vykonajte nasledujúce zmeny:

{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.[t|j]sx?$": "babel-jest"
    }
  }
}

Vytvorte konfiguračný súbor .babelrc Vytvorte v koreňovom adresári svojho projektu konfiguráciu babel.config.json a zapnite niektoré prednastavenia. Na začiatok môžete použiť prednastavenie env, ktoré umožňuje transformácie pre ES2015+

npm install @babel/preset-env --save-dev

Aby ste mohli prednastavenie povoliť, musíte ho definovať vo svojom súbore babel.config.json takto:

{
  "presets": ["@babel/preset-env"]
}

Skontrolujte viac podrobností na oficiálnej stránke Babel

Súvisiace články