Модульные тесты Ava не выполняются с помощью TypeScript («SyntaxError: Неожиданный идентификатор») - PullRequest
0 голосов
/ 12 июня 2019

Я изучаю TypeScript и создал приложение TypeScript React с create-react-app. Он использует отдельный файл TypeScript logic.ts, который, в свою очередь, импортирует файл JSON

import pastaData from './data/users-pasta.json'

 const ParsedUserData  = pastaData.map(data => ({name: data.name, gender:data.gender,favorites: data.favorites}));

export const getPastaData = () => ParsedUserData;

Работает нормально. Но когда я запускаю тест Ava (который на данный момент ничего не делает)

const {getPastaData} = require( '../src/logic.ts')

describe("A suite", function() {
  it("contains spec with an expectation", function() {
    expect(true).toBe(true);
  });
}); 

Я получаю следующую ошибку

/src/logic.ts:1
(function (exports, require, module, __filename, __dirname) { import pastaData from './data/users-pasta.json';
SyntaxError: Unexpected identifier

Он жалуется на импорт данных pastaData здесь.

Я настроил Ava для работы с Typescript (из package.json)

{

  "ava": {
    "compileEnhancements": false,
    "extensions": [
      "ts"
    ],
    "require": [
      "ts-node/register"
    ]
  }
}

И теперь пытаюсь заставить Ava-ts работать. Та же проблема.

Я думаю, что это проблема с ts-node, но изменение всех связанных файлов на 'require' оказывается проблематичным (и TypeScript начинает жаловаться). Есть ли способ заставить это работать с «импортом» ES-6? Или я что-то упускаю совсем?

Любая помощь высоко ценится!

1 Ответ

2 голосов
/ 12 июня 2019

AVA (с настройкой TypeScript) компилирует код TypeScript обратно в JavaScript перед выполнением.

И NodeJS не поддерживает синтаксис esm, если вы не делаете *.mjs.

Таким образом, вы должны установить свой «модуль» на «commonjs» в вашем tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs"
  }
}
...