SonarQube не может прочитать lcov.info для JavaScript
Я использую карма-покрытие вместе с isparta-loader в моем модульном тесте JavaScript для генерации lcov.info
файл.
Однако, когда я запускаю анализ SonarQube с помощью плагина JavaScript, отчет о покрытии теста не создается. Если lcov.info
содержит данные для 1 файла, отчет о покрытии не является ошибкой, но если lcov.info
содержит данные для 2 или более файлов, поэтому он всегда терпит неудачу в:
13: 43: 27.635 ИНФОРМАЦИЯ - Сохранить результаты в базе данных 13:43:27.649 DEBUG - выполнить org.sonar.batch.phases.GraphPersister 13:43:27.714 DEBUG - выполнить org.sonar.batch.index.SourcePersister 13:43:29.852 DEBUG - Выпустить семафор проекта: org.sonar.api.resources.Project@6b1e6f8b[id=7859,key=func.salesorder NG, квалификатор =TRK], с ключом batch-func.salesorderNG INFO: ------------------------------------------------------------------------ ИНФОРМАЦИЯ: ИНФОРМАЦИЯ О СБОРЕ ИСПОЛНЕНИЯ: ---------------------------- -------------------------------------------- Общее время: 4:14.804s Окончательная память: 23M/828M INFO: --------------------------------------------------------------------
ОШИБКА: ошибка во время выполнения сонара бегуна
org.sonar.runner.impl.RunnerException: Невозможно выполнить сонар в org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) в org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) в java.security.AccessController.doPrivileged(собственный метод) в org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) в org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher. Java:50) в org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) в org.sonar.runner.api.Runner.execute(Runner.java:100) в org.sonar.runner.Main.executeTask(Main.java:70) в org.sonar.runner.Main.execute(Main.java:59) в org.sonar.runner.Main.main(Main.java:53) Причина: java.lang.IllegalStateException: невозможно сохранить исходные файлы в org.sonar.batch.index.SourcePersister.persist(SourcePersister.java:84) в org.sonar.batch.phases.DatabaseModePhaseExecutor.executePersisters(DatabaseModePhaseExecutor.java:16son) в или batch.phases.DatabaseModePhaseExecutor.execute(DatabaseModePhaseExecutor.java:133) в org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:264) в org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainar.java:92) api.platform.ComponentContainer.execute(ComponentContainer.java:77) в org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:235) в org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectsanContainer.scanRecursively (230) по адресу org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:220) по адресу org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) по адресу org.sonar.api.ponenttain...execute (ComponentContainer.java:77) в org.sonar.batch.scan.ScanTask.scan(ScanTask.java:57) в org.sonar.batch.scan.ScanTask.execute(ScanTask.java:45) в орг.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:135) в org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java: 92) в org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) в org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:158) в org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95) в org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) в org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) в java.lanke.hof (неизвестный источник) at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) ... еще 9 Причины: java.lang.ArrayIndexOutOfBoundsException: -1 в java.util.ArrayList.elementData(Неизвестный источник) в java.util.ArrayList.get(Неизвестный источник) на com.google.protobuf.RepeatedFieldBuilder.getBuilder(RepeatedFieldBuilder.java:245) на org.sonar.server.source.db.FileSourceDb$Data$Builder.getLinesBuilder(FileSourceDb.java:2911) по адресу org.sonar.batch.index.SourceDataFactory.applyLineMeasure(SourceDataFactory.java:183) по адресу org.sonar.batch.index.SourceDataFactory.applyLineMeactures.DjDataSigningDataFactoryDataDataFactoryDataDataSigner.jas7.sonar.batch.index.SourceDataFactory.consolidateData(SourceDataFactory.java:76) в org.sonar.batch.index.SourcePersister.computeData(SourcePersister.java:152) в org.sonar.batch.index.SourcePersistererspers ((.java:93) в org.sonar.batch.index.SourcePersister.persist(SourcePersister.java:81) ... еще 33
lcov.info
показывает следующую информацию:
SF:D:\SOC\src\UI\UI.ng\js\general\services\tabStateService.js
FN:3,_interopRequireDefault
FN:11,(anonymous_2)
FN:14,tabStateService
FN:17,moveNext
FNF:4
FNH:4
FNDA:1,_interopRequireDefault
FNDA:1,(anonymous_2)
FNDA:21,tabStateService
FNDA:2,moveNext
DA:0,1
DA:1,1
DA:4,1
DA:5,1
DA:8,1
DA:9,21
DA:10,21
DA:12,2
LF:8
LH:8
BRDA:3,1,0,0
BRDA:3,1,1,1
BRDA:3,2,0,1
BRDA:3,2,1,1
BRF:4
BRH:4
end_of_record
TN:
SF:D:\SOC\src\UI\UI.ng\js\general\services\pagingService.js
FN:5,(anonymous_1)
FN:8,pagingService
FN:14,getPagingParams
FN:20,calculateSkip
FNF:4
FNH:4
FNDA:1,(anonymous_1)
FNDA:23,pagingService
FNDA:11,getPagingParams
FNDA:7,calculateSkip
DA:1,1
DA:3,1
DA:4,1
DA:7,1
DA:9,23
DA:13,1
DA:14,11
DA:15,2
DA:16,9
DA:17,7
DA:18,2
DA:21,1
DA:22,7
LF:13
LH:13
BRDA:15,1,0,2
BRDA:15,1,1,9
BRDA:15,2,0,11
BRDA:15,2,1,9
BRDA:16,3,0,7
BRDA:16,3,1,2
BRDA:16,4,0,9
BRDA:16,4,1,7
BRF:8
BRH:8
end_of_record
1 ответ
Проблема исходит от этой линии вашего lcov.info
:
DA:0,1
Это означает, что строка 0 покрыта юнит-тестами. Это делает анализ неудачным, потому что ожидаются только строго положительные номера строк.
В таких случаях есть способ улучшить поведение SonarQube.