NYC Runtime покрытие с огурцом - PullRequest
       58

NYC Runtime покрытие с огурцом

0 голосов
/ 19 февраля 2019

Я пытаюсь получить покрытие для моих тестов e2e, написанных на cucumber / TS, но мой отчет о тестировании никогда не может сопоставиться с моими исходными файлами.

Отчет - это просто список каталогов, инажатие на отдельные файлы * .ts приводит к получению стековой трассировки (*** вызвала бы мое имя пользователя / репо):

Unable to lookup source: /Users/***/dev/git/***/dist/webpack:/src/gql/index.ts(ENOENT: no such file or directory, open '/Users/***/dev/git/***/dist/webpack:/src/gql/index.ts')
Error: Unable to lookup source: /Users/***/dev/git/***/dist/webpack:/src/gql/index.ts(ENOENT: no such file or directory, open '/Users/***/dev/git/***/dist/webpack:/src/gql/index.ts')

Что я пытаюсь сделать :

  1. Запуск инструментированного приложения с исходными картами TypeScript
  2. Внешний запуск моих тестов для этого приложения
  3. Остановка приложения и создание отчета о покрытии для исходного кода TS

Мои настройки следующие: ,

  • узел: v9.4.0
  • webpack: ^4.23.0,
  • машинопись: ~3.1.6

tsconfig :

{
    "compilerOptions": {
    "rootDir": "./src",
    "module": "commonjs",
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "noEmitOnError": true,
    "declaration": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "lib": ["esnext"],
    "skipLibCheck": true,
    "allowSyntheticDefaultImports": true,
    "baseUrl": "src",
    "noImplicitAny": true,
    "typeRoots": ["./typings", "./node_modules/@types"],
    "experimentalDecorators": true
  },
  "exclude": ["node_modules", "dist"]
}

webpack.config.js :

module.exports = {
  entry: ['./src/index.ts'],
  target: 'node',
  mode: process.env.NODE_ENV === 'dev' ? 'development' : 'production',
  externals: [nodeExternals()], // in order to ignore all modules in node_modules folder,
  devtool: 'inline-source-map',
  module: {
    rules: [
      {
        test: /.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  resolve: {
    extensions: ['.tsx', '.ts', '.js'],
    modules: [path.resolve(__dirname, 'src'), 'node_modules']
  },
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'index.js'
  }
}

пакет.json (соответствующие части):

"scripts": {
    "start-coverage": "NODE_ENV=test nyc node --reporter=lcov dist/index.js",
    ...
}, 
"nyc": {
  "all": true,
  "require": "ts-node/register",
  "instrument": true,
  "report-dir": "./coverage",
  "temp-dir": "./temp",
  "source-map": true,
  "produce-source-map": false
},

Проблема снова в том, что приведенные выше трассировки стека не могут отобразить отдельные файлы.Я перепробовал множество комбинаций конфигов и всегда оказывался здесь.

  • Кто-нибудь знает, что может быть не так?
  • Должен ли я использовать remap-istanbul для этого?

1 Ответ

0 голосов
/ 20 февраля 2019

Нашел проблему.Это ошибка в веб-пакете, исправленная в https://github.com/SitePen/remap-istanbul/issues/68.

Решение находится в веб-пакете, необходимо добавить параметр: devtoolModuleFilenameTemplate.Секция вывода выглядит следующим образом:

output: {
    path: path.join(__dirname, 'dist'),
    filename: 'index.js',
    devtoolModuleFilenameTemplate: '[resource-path]'}

с просто devtool: 'source-map' в webpack.config.js, и все!Нам даже не потребовалась конфигурация nyc в package.json, а также никакие изменения в tsconfig.json, кроме sourceMaps:true.

...