Использование async / await в модульных тестах Jest приводит к ошибке в PhpStorm (или любой IDE JetBrains) - PullRequest
0 голосов
/ 07 октября 2018

Это мой tsconfig.json файл:

{
  "compilerOptions": {
    "lib": ["es2017"],
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es6"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ],
  "exclude": [
    "node_modules"
  ]
}

Структура каталогов:

.
├── lib
├── src
│   └── module.ts
├── tests
│   └── module.spec.ts
└── tsconfig.json

Я могу написать асинхронный / ожидающий код в src каталоге, но когда я пытаюсьчтобы использовать синтаксис async / await в модульном тесте, тогда моя IDE (PhpStorm или любой продукт JetBrains) жалуется, что:

TS2705: асинхронная функция или метод в ES5 / ES3 требует конструктора Promise.Убедитесь, что у вас есть декларация из конструктора 'Promise' или вы включили 'es2015' в свои опции --lib.

enter image description here

IMO thisуведомление не имеет смысла, потому что у меня "lib": ["es2017"] в моем tsconfig.json.Но даже если я заменю его на "lib": ["es2015"] (что, я знаю, не имеет смысла), ошибка останется прежней.

Вероятно, это не настоящая ошибка, потому что код компилируется правильно, и я могузапустите тест.

Это просто ошибка в IDE или я что-то не так делаю?


Обновление

Я только что обнаружил, что проблемане относится только к async / await.Есть похожая проблема с Обещаниями.Когда я использую конструктор Promise или Promise.all(), я получаю следующую ошибку:

TS2693: «Обещание» относится только к типу, но здесь используется в качестве значения.

1 Ответ

0 голосов
/ 08 октября 2018

В вашем tsconfig.json у вас есть

"include": [
    "src"
  ]

, поэтому только файлы из папки src обрабатываются в соответствии с настройками tsconfig.json;файлы из папки tests исключаются из компиляции.Если PhpStorm не может найти файл tsconfig.json, в который включен ваш текущий файл, он использует настройки компиляции по умолчанию - поэтому "lib": ["es2017"] не используется при привязке ваших файлов спецификаций с помощью службы Typescript и вы видите ошибки TS.

Если вы не хотите включать тестовые файлы в свою основную tsconfig.json, создайте отдельную tsconfig.json с соответствующими параметрами в папке tests: PhpStorm будет использовать эту конфигурацию при указании файлов *.spec.ts

...