Проблема с отладкой теста мокко из машинописного текста - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь отладить тест мокко, но у меня есть проблема, и я не знаю, как я могу ее решить. Я ищу в Google до и в stackoverflow, но безуспешно.

Ошибка:

TSError: ⨯ Unable to compile TypeScript:
source-map-support.js:444 error TS2468: Cannot find global value 'Promise'.backend/test/textToSpeech/lib.ts(11,30): error TS2705: An async 
function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.backend/test/textToSpeech/lib.ts(12,27): error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.

Файл tsconfig.json выглядит следующим образом:

{
"compilerOptions": {
  "module": "commonjs",
  "watch": true,
  "noImplicitAny": false,
  "removeComments": true,
  "outDir": "./dist",
  "sourceMap": true,
  "target": "es6",
  "lib": [
      "ES2015"
  ],
  "types": [
    "node",
    "pg-promise"
  ],
  "typeRoots": [
    "node_modules/@types"
  ]
  },
  "include": [
  "src/**/*"
 ],
"exclude": [
  "node_modules",
  "**/*.spec.ts"
 ]
}

Конфигурация vscode launch.json и Конфигурация vscode launch.json

{
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/backend/node_modules/mocha/bin/_mocha",
      "args": [
          "--require", "ts-node/register",
          "-u",
          "tdd",
          "--timeout",
          "999999",
          "--colors",
          "${workspaceFolder}/backend/test/textToSpeech/lib.ts"
      ],
      "internalConsoleOptions": "openOnSessionStart"
  }

Тестовый файл:

import {} from 'mocha'
import { expect } from 'chai'
import config from '../configuration'
import { TextToSpeechLib } from '../../src/libs/textToSpeech/'
var textToSpeach = new TextToSpeechLib(config)

var text = 'Hello world'


describe('TextToSpeach lib', async () => {
  it ('Convert text ...', async () => {
    console.log("==== =a= =s= a==")
    let resp = await textToSpeach.convertText(text);
    expect(resp.status).to.be.equal('success')
  })
})

Я много чего пробовал. Это как лаунчер не загружай tsconfig. Я попытался передать "--lib", "ES2015" как arg в конфигурации лаунчера. Спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Возможно, вы уже пошли дальше, но, возможно, кто-то другой ищет тот же ответ.Сообщение об ошибке ясно говорит вам, что делать:

Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your --lib option

Поскольку я не хотел предоставлять свое собственное объявление для конструктора Promise, я решил каким-то образом включить ES2015в опциях.

Проблема:

Поскольку я не мог понять, как указать ts-узел на конкретный файл tsconfig.json, мне пришлось пропустить опцию через CLI.

Прочитав часть исходного кода ts-узла, я понял, что все, что мне нужно было сделать, это добавить TS_NODE_COMPILER_OPTIONS={"lib": ["ES2015"]} к process.env.

Решение:

Когдаотладка с использованием кода VS, вы можете достичь этой цели, добавив

"env": {"TS_NODE_COMPILER_OPTIONS":"{\"lib\": [\"ES2015\"]}"}

в вашу конфигурацию.

Когда вы хотите запустить свои тесты, например, используя npm testВы можете добавить эту опцию в vars среды перед запуском тестового сценария, используя cross-env .Я написал что-то вроде этого в своем package.json:

"scripts": { "test": "cross-env TS_NODE_COMPILER_OPTIONS=\"{\\\"lib\\\": [\\\"ES2015\\\"]}\" mocha --require ts-node/register path/to/test(s).ts" }

Я не смог быстро понять, как извлечь команду cross-env в другой скрипт npm, ноЯ сам новичок, так что это, вероятно, ничего не значит.

...