Угловое тестирование - Ошибка при создании отчета о покрытии - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь получить отчет о покрытии от ng test --code-coverage. Без покрытия тесты работают без проблем, но с ним я получаю эту ошибку:

ERROR [karma]: TypeError: Cannot read property 'replace' of undefined
  at fixPathSeparators (<path>\node_modules\karma-coverage-istanbul-reporter\src\util.js:20:21)
  at Object.fixWebpackSourcePaths (<path>\node_modules\karma-coverage-istanbul-reporter\src\util.js:41:16)
  at Object.keys.forEach.filename (<path>\node_modules\karma-coverage-istanbul-reporter\src\reporter.js:46:44)
  at Array.forEach (<anonymous>)
  at addCoverage (<path>\node_modules\karma-coverage-istanbul-reporter\src\reporter.js:43:27)
  at createReport (<path>\node_modules\karma-coverage-istanbul-reporter\src\reporter.js:98:7)
  at browsers.forEach.browser (<path>\node_modules\karma-coverage-istanbul-reporter\src\reporter.js:213:9)
  at Array.forEach (<anonymous>)
  at Collection.forEach (<path>\node_modules\karma\lib\browser_collection.js:93:21)
  at CoverageIstanbulReporter.onRunComplete (<path>\node_modules\karma-coverage-istanbul-reporter\src\reporter.js:212:16)
  at Server.<anonymous> (<path>\node_modules\karma\lib\events.js:13:22)
  at emitTwo (events.js:131:20)
  at Server.emit (events.js:214:7)
  at Timeout._onTimeout (<path>\node_modules\karma\lib\executor.js:51:17)
  at ontimeout (timers.js:498:11)
  at tryOnTimeout (timers.js:323:5)

Некоторые отладки показали, что sourceMap, используемый внутри Стамбула, не имеет атрибута sourceRoot. Я попытался добавить это к нескольким файлам конфигурации без удачи.

По моему karam.conf.js у меня есть:

coverageIstanbulReporter: {
  dir: require('path').join(__dirname, '../coverage'),
  reports: ['html', 'lcovonly'],
  fixWebpackSourcePaths: true
}

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

Факты

  • Угловой 6.1.0
  • Жасмин 2.99.1
  • Карма 1.7.1
  • Карма Покрытие Стамбул Репортер: 2.0.0

Спасибо!

1 Ответ

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

Решил!

У меня есть пользовательская библиотека, которая является частью проекта и используется в компоненте с <clib-element></clib-element>.

В component.spec.ts родительского компонента я импортировал его так:

TestBed.configureTestingModule({
  ...
  imports: [ CLibModule ] /* Don't do it like this */
})

Вместо этого мне пришлось издеваться над использованным компонентом. Я написал этот фиктивный компонент:

@Component({
  selector: 'clib-element' /* Important: Same selector as real component */
})
export class ElementMockComponent {
  /* declare used methods and attributes */
}

Объявите это в тестовом файле:

TestBed.configureTestingModule({
  ...
  declarations: [ ElementMockComponent ]
})

... и ошибка исчезла. Надеюсь, это поможет и другим!

...