Add table with reports results if there are more test runs

This commit is contained in:
Michal Dorner 2021-01-29 00:51:08 +01:00
parent 96e91aa726
commit c75a9dd8c8
No known key found for this signature in database
GPG key ID: 9EEE04B48DA36786
7 changed files with 329 additions and 308 deletions

View file

@ -1,38 +1,30 @@
![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
### fixtures/dart-json.json
![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical)
## <a id="user-content-r0" href="#r0">fixtures/dart-json.json</a>
**6** tests were completed in **3.760s** with **1** passed, **4** failed and **1** skipped.
|Suite|Passed|Failed|Skipped|Time|
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[test\main_test.dart](#r0s0-test-maintest-dart)|1✔|3❌||74ms|
|[test\second_test.dart](#r0s1-test-secondtest-dart)||1❌|1✖|51ms|
# Test Suites
## <a id="user-content-r0s0-test-maintest-dart" href="#r0s0-test-maintest-dart">test\main_test.dart</a>
### Test 1
|[test\main_test.dart](#r0s0)|1✔|3❌||74ms|
|[test\second_test.dart](#r0s1)||1❌|1✖|51ms|
### <a id="user-content-r0s0" href="#r0s0">test\main_test.dart</a>
**4** tests were completed in **74ms** with **1** passed, **3** failed and **0** skipped.
**Test 1**
|Result|Test|Time|
|:---:|:---|---:|
|✔️|Test 1 Passing test|36ms|
### Test 1 Test 1.1
**Test 1 Test 1.1**
|Result|Test|Time|
|:---:|:---|---:|
|❌|Test 1 Test 1.1 Failing test|20ms|
|❌|Test 1 Test 1.1 Exception in target unit|6ms|
### Test 2
**Test 2**
|Result|Test|Time|
|:---:|:---|---:|
|❌|Test 2 Exception in test|12ms|
## <a id="user-content-r0s1-test-secondtest-dart" href="#r0s1-test-secondtest-dart">test\second_test.dart</a>
### <a id="user-content-r0s1" href="#r0s1">test\second_test.dart</a>
**2** tests were completed in **51ms** with **0** passed, **1** failed and **1** skipped.
|Result|Test|Time|
|:---:|:---|---:|

View file

@ -1,16 +1,11 @@
![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%201%20skipped%2C%203%20failed-critical)
### fixtures/dotnet-trx.trx
![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%203%20failed%2C%201%20skipped-critical)
## <a id="user-content-r0" href="#r0">fixtures/dotnet-trx.trx</a>
**7** tests were completed in **1.061s** with **3** passed, **3** failed and **1** skipped.
|Suite|Passed|Failed|Skipped|Time|
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[DotnetTests.XUnitTests.CalculatorTests](#r0s0-DotnetTests-XUnitTests-CalculatorTests)|3✔|3❌|1✖|110ms|
# Test Suites
## <a id="user-content-r0s0-DotnetTests-XUnitTests-CalculatorTests" href="#r0s0-DotnetTests-XUnitTests-CalculatorTests">DotnetTests.XUnitTests.CalculatorTests</a>
|[DotnetTests.XUnitTests.CalculatorTests](#r0s0)|3✔|3❌|1✖|110ms|
### <a id="user-content-r0s0" href="#r0s0">DotnetTests.XUnitTests.CalculatorTests</a>
**7** tests were completed in **109.5761ms** with **3** passed, **3** failed and **1** skipped.
|Result|Test|Time|
|:---:|:---|---:|

View file

@ -1,10 +1,7 @@
![Tests passed successfully](https://img.shields.io/badge/tests-803%20passed%2C%201%20skipped-success)
### fixtures/external/FluentValidation.Tests.trx
## <a id="user-content-r0" href="#r0">fixtures/external/FluentValidation.Tests.trx</a> ✔️
**804** tests were completed in **4.480s** with **803** passed, **0** failed and **1** skipped.
|Suite|Passed|Failed|Skipped|Time|
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|FluentValidation.Tests.AbstractValidatorTester|35✔|||12ms|
|FluentValidation.Tests.AccessorCacheTests|4✔||1✖|4ms|
@ -53,7 +50,7 @@
|FluentValidation.Tests.PropertyChainTests|7✔|||1ms|
|FluentValidation.Tests.RegularExpressionValidatorTests|15✔|||6ms|
|FluentValidation.Tests.RuleBuilderTests|29✔|||96ms|
|FluentValidation.Tests.RuleDependencyTests|14✔|||2511ms|
|FluentValidation.Tests.RuleDependencyTests|14✔|||2.511s|
|FluentValidation.Tests.RulesetTests|21✔|||14ms|
|FluentValidation.Tests.ScalePrecisionValidatorTests|6✔|||4ms|
|FluentValidation.Tests.SharedConditionTests|42✔|||42ms|

View file

@ -1,38 +1,30 @@
![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20skipped%2C%204%20failed-critical)
### fixtures/jest-junit.xml
![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical)
## <a id="user-content-r0" href="#r0">fixtures/jest-junit.xml</a>
**6** tests were completed in **1.360s** with **1** passed, **4** failed and **1** skipped.
|Suite|Passed|Failed|Skipped|Time|
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|[__tests__\main.test.js](#r0s0-tests-main-test-js)|1✔|3❌||486ms|
|[__tests__\second.test.js](#r0s1-tests-second-test-js)||1❌|1✖|82ms|
# Test Suites
## <a id="user-content-r0s0-tests-main-test-js" href="#r0s0-tests-main-test-js">__tests__\main.test.js</a>
### Test 1
|[__tests__\main.test.js](#r0s0)|1✔|3❌||486ms|
|[__tests__\second.test.js](#r0s1)||1❌|1✖|82ms|
### <a id="user-content-r0s0" href="#r0s0">__tests__\main.test.js</a>
**4** tests were completed in **486ms** with **1** passed, **3** failed and **0** skipped.
**Test 1**
|Result|Test|Time|
|:---:|:---|---:|
|✔️|Passing test|1ms|
### Test 1 Test 1.1
**Test 1 Test 1.1**
|Result|Test|Time|
|:---:|:---|---:|
|❌|Failing test|2ms|
|❌|Exception in target unit|0ms|
### Test 2
**Test 2**
|Result|Test|Time|
|:---:|:---|---:|
|❌|Exception in test|0ms|
## <a id="user-content-r0s1-tests-second-test-js" href="#r0s1-tests-second-test-js">__tests__\second.test.js</a>
### <a id="user-content-r0s1" href="#r0s1">__tests__\second.test.js</a>
**2** tests were completed in **82ms** with **0** passed, **1** failed and **1** skipped.
|Result|Test|Time|
|:---:|:---|---:|

View file

@ -1,185 +1,182 @@
![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%2030%20skipped%2C%202%20failed-critical)
### fixtures/external/jest/jest-test-results.xml
![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%202%20failed%2C%2030%20skipped-critical)
## <a id="user-content-r0" href="#r0">fixtures/external/jest/jest-test-results.xml</a>
**4239** tests were completed in **165.872s** with **4207** passed, **2** failed and **30** skipped.
|Suite|Passed|Failed|Skipped|Time|
|Test suite|Passed|Failed|Skipped|Time|
|:---|---:|---:|---:|---:|
|e2e/__tests__/asyncAndCallback.test.ts|1✔|||746ms|
|e2e/__tests__/asyncRegenerator.test.ts|1✔|||4127ms|
|e2e/__tests__/autoClearMocks.test.ts|2✔|||1681ms|
|e2e/__tests__/autoResetMocks.test.ts|2✔|||1666ms|
|e2e/__tests__/autoRestoreMocks.test.ts|2✔|||1797ms|
|e2e/__tests__/babelPluginJestHoist.test.ts|1✔|||6249ms|
|e2e/__tests__/asyncRegenerator.test.ts|1✔|||4.127s|
|e2e/__tests__/autoClearMocks.test.ts|2✔|||1.681s|
|e2e/__tests__/autoResetMocks.test.ts|2✔|||1.666s|
|e2e/__tests__/autoRestoreMocks.test.ts|2✔|||1.797s|
|e2e/__tests__/babelPluginJestHoist.test.ts|1✔|||6.249s|
|e2e/__tests__/badSourceMap.test.ts|1✔|||858ms|
|e2e/__tests__/beforeAllFiltered.ts|1✔|||958ms|
|e2e/__tests__/beforeEachQueue.ts|1✔||1✖|55ms|
|e2e/__tests__/callDoneTwice.test.ts|1✔|||882ms|
|e2e/__tests__/chaiAssertionLibrary.ts|1✔|||1902ms|
|e2e/__tests__/circularInequality.test.ts|1✔|||1451ms|
|e2e/__tests__/circusConcurrentEach.test.ts|2✔|||1591ms|
|e2e/__tests__/chaiAssertionLibrary.ts|1✔|||1.902s|
|e2e/__tests__/circularInequality.test.ts|1✔|||1.451s|
|e2e/__tests__/circusConcurrentEach.test.ts|2✔|||1.591s|
|e2e/__tests__/circusDeclarationErrors.test.ts|1✔|||869ms|
|e2e/__tests__/clearCache.test.ts|2✔|||1004ms|
|e2e/__tests__/cliHandlesExactFilenames.test.ts|2✔|||1230ms|
|e2e/__tests__/compareDomNodes.test.ts|1✔|||1407ms|
|e2e/__tests__/config.test.ts|6✔|||3945ms|
|e2e/__tests__/console.test.ts|7✔|||8072ms|
|e2e/__tests__/consoleAfterTeardown.test.ts|1✔|||1341ms|
|e2e/__tests__/clearCache.test.ts|2✔|||1.004s|
|e2e/__tests__/cliHandlesExactFilenames.test.ts|2✔|||1.230s|
|e2e/__tests__/compareDomNodes.test.ts|1✔|||1.407s|
|e2e/__tests__/config.test.ts|6✔|||3.945s|
|e2e/__tests__/console.test.ts|7✔|||8.072s|
|e2e/__tests__/consoleAfterTeardown.test.ts|1✔|||1.341s|
|e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts|1✔|||793ms|
|e2e/__tests__/coverageHandlebars.test.ts|1✔|||1873ms|
|e2e/__tests__/coverageRemapping.test.ts|1✔|||12701ms|
|e2e/__tests__/coverageReport.test.ts|12✔|||22264ms|
|e2e/__tests__/coverageThreshold.test.ts|5✔|||4868ms|
|e2e/__tests__/coverageTransformInstrumented.test.ts|1✔|||5029ms|
|e2e/__tests__/coverageWithoutTransform.test.ts|1✔|||1075ms|
|e2e/__tests__/coverageHandlebars.test.ts|1✔|||1.873s|
|e2e/__tests__/coverageRemapping.test.ts|1✔|||12.701s|
|e2e/__tests__/coverageReport.test.ts|12✔|||22.264s|
|e2e/__tests__/coverageThreshold.test.ts|5✔|||4.868s|
|e2e/__tests__/coverageTransformInstrumented.test.ts|1✔|||5.029s|
|e2e/__tests__/coverageWithoutTransform.test.ts|1✔|||1.075s|
|e2e/__tests__/createProcessObject.test.ts|1✔|||908ms|
|e2e/__tests__/customInlineSnapshotMatchers.test.ts|1✔|||2206ms|
|e2e/__tests__/customMatcherStackTrace.test.ts|2✔|||1539ms|
|e2e/__tests__/customReporters.test.ts|9✔|||6553ms|
|e2e/__tests__/customInlineSnapshotMatchers.test.ts|1✔|||2.206s|
|e2e/__tests__/customMatcherStackTrace.test.ts|2✔|||1.539s|
|e2e/__tests__/customReporters.test.ts|9✔|||6.553s|
|e2e/__tests__/customResolver.test.ts|1✔|||826ms|
|e2e/__tests__/customTestSequencers.test.ts|3✔|||2757ms|
|e2e/__tests__/customTestSequencers.test.ts|3✔|||2.757s|
|e2e/__tests__/debug.test.ts|1✔|||899ms|
|e2e/__tests__/declarationErrors.test.ts|3✔|||2389ms|
|e2e/__tests__/declarationErrors.test.ts|3✔|||2.389s|
|e2e/__tests__/dependencyClash.test.ts|1✔|||833ms|
|e2e/__tests__/detectOpenHandles.ts|8✔|||7528ms|
|e2e/__tests__/domDiffing.test.ts|1✔|||1361ms|
|e2e/__tests__/detectOpenHandles.ts|8✔|||7.528s|
|e2e/__tests__/domDiffing.test.ts|1✔|||1.361s|
|e2e/__tests__/doneInHooks.test.ts|1✔|||855ms|
|e2e/__tests__/dynamicRequireDependencies.ts|1✔|||847ms|
|e2e/__tests__/each.test.ts|7✔|||4721ms|
|e2e/__tests__/emptyDescribeWithHooks.test.ts|4✔|||2886ms|
|e2e/__tests__/each.test.ts|7✔|||4.721s|
|e2e/__tests__/emptyDescribeWithHooks.test.ts|4✔|||2.886s|
|e2e/__tests__/emptySuiteError.test.ts|1✔|||885ms|
|e2e/__tests__/env.test.ts|6✔|||5221ms|
|e2e/__tests__/env.test.ts|6✔|||5.221s|
|e2e/__tests__/environmentAfterTeardown.test.ts|1✔|||892ms|
|e2e/__tests__/errorOnDeprecated.test.ts|1✔||24✖|56ms|
|e2e/__tests__/esmConfigFile.test.ts|3✔|||526ms|
|e2e/__tests__/executeTestsOnceInMpr.ts|1✔|||976ms|
|e2e/__tests__/existentRoots.test.ts|4✔|||627ms|
|e2e/__tests__/expectAsyncMatcher.test.ts|2✔|||2732ms|
|e2e/__tests__/expectInVm.test.ts|1✔|||1527ms|
|e2e/__tests__/extraGlobals.test.ts|1✔|||1011ms|
|e2e/__tests__/expectAsyncMatcher.test.ts|2✔|||2.732s|
|e2e/__tests__/expectInVm.test.ts|1✔|||1.527s|
|e2e/__tests__/extraGlobals.test.ts|1✔|||1.011s|
|e2e/__tests__/failureDetailsProperty.test.ts|1✔|||907ms|
|e2e/__tests__/failures.test.ts|7✔|||10353ms|
|e2e/__tests__/fakePromises.test.ts|2✔|||1716ms|
|e2e/__tests__/fatalWorkerError.test.ts|1✔|||3167ms|
|e2e/__tests__/filter.test.ts|7✔|||5422ms|
|e2e/__tests__/findRelatedFiles.test.ts|5✔|||6230ms|
|e2e/__tests__/failures.test.ts|7✔|||10.353s|
|e2e/__tests__/fakePromises.test.ts|2✔|||1.716s|
|e2e/__tests__/fatalWorkerError.test.ts|1✔|||3.167s|
|e2e/__tests__/filter.test.ts|7✔|||5.422s|
|e2e/__tests__/findRelatedFiles.test.ts|5✔|||6.230s|
|e2e/__tests__/focusedTests.test.ts|1✔|||888ms|
|e2e/__tests__/forceExit.test.ts|1✔|||2208ms|
|e2e/__tests__/generatorMock.test.ts|1✔|||1027ms|
|e2e/__tests__/forceExit.test.ts|1✔|||2.208s|
|e2e/__tests__/generatorMock.test.ts|1✔|||1.027s|
|e2e/__tests__/global-mutation.test.ts|1✔|||40ms|
|e2e/__tests__/global.test.ts|1✔|||31ms|
|e2e/__tests__/globals.test.ts|10✔|||7505ms|
|e2e/__tests__/globalSetup.test.ts|10✔|||13926ms|
|e2e/__tests__/globalTeardown.test.ts|7✔|||11886ms|
|e2e/__tests__/globals.test.ts|10✔|||7.505s|
|e2e/__tests__/globalSetup.test.ts|10✔|||13.926s|
|e2e/__tests__/globalTeardown.test.ts|7✔|||11.886s|
|e2e/__tests__/hasteMapMockChanged.test.ts|1✔|||379ms|
|e2e/__tests__/hasteMapSha1.test.ts|1✔|||298ms|
|e2e/__tests__/hasteMapSize.test.ts|2✔|||397ms|
|e2e/__tests__/importedGlobals.test.ts|1✔|||1043ms|
|e2e/__tests__/injectGlobals.test.ts|2✔|||1860ms|
|e2e/__tests__/jasmineAsync.test.ts|15✔|||28291ms|
|e2e/__tests__/importedGlobals.test.ts|1✔|||1.043s|
|e2e/__tests__/injectGlobals.test.ts|2✔|||1.860s|
|e2e/__tests__/jasmineAsync.test.ts|15✔|||28.291s|
|e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts|1✔||1✖|72ms|
|e2e/__tests__/jest.config.js.test.ts|3✔|||2134ms|
|e2e/__tests__/jest.config.ts.test.ts|5✔|||14322ms|
|[e2e/__tests__/jestChangedFiles.test.ts](#r0s75-e2e-tests-jestChangedFiles-test-ts)|9✔|1❌||9045ms|
|e2e/__tests__/jestEnvironmentJsdom.test.ts|1✔|||1744ms|
|e2e/__tests__/jestRequireActual.test.ts|1✔|||1665ms|
|e2e/__tests__/jestRequireMock.test.ts|1✔|||2119ms|
|e2e/__tests__/jest.config.js.test.ts|3✔|||2.134s|
|e2e/__tests__/jest.config.ts.test.ts|5✔|||14.322s|
|[e2e/__tests__/jestChangedFiles.test.ts](#r0s75)|9✔|1❌||9.045s|
|e2e/__tests__/jestEnvironmentJsdom.test.ts|1✔|||1.744s|
|e2e/__tests__/jestRequireActual.test.ts|1✔|||1.665s|
|e2e/__tests__/jestRequireMock.test.ts|1✔|||2.119s|
|e2e/__tests__/json.test.ts|2✔|||29ms|
|e2e/__tests__/jsonReporter.test.ts|2✔|||1514ms|
|e2e/__tests__/jsonReporter.test.ts|2✔|||1.514s|
|e2e/__tests__/lifecycles.ts|1✔|||861ms|
|e2e/__tests__/listTests.test.ts|2✔|||945ms|
|e2e/__tests__/locationInResults.test.ts|2✔|||1764ms|
|e2e/__tests__/locationInResults.test.ts|2✔|||1.764s|
|e2e/__tests__/logHeapUsage.test.ts|1✔|||884ms|
|e2e/__tests__/mockNames.test.ts|8✔|||6771ms|
|e2e/__tests__/modernFakeTimers.test.ts|2✔|||1680ms|
|e2e/__tests__/moduleNameMapper.test.ts|5✔|||5395ms|
|e2e/__tests__/mockNames.test.ts|8✔|||6.771s|
|e2e/__tests__/modernFakeTimers.test.ts|2✔|||1.680s|
|e2e/__tests__/moduleNameMapper.test.ts|5✔|||5.395s|
|e2e/__tests__/moduleParentNullInTest.ts|1✔|||886ms|
|e2e/__tests__/multiProjectRunner.test.ts|14✔|||16360ms|
|e2e/__tests__/multiProjectRunner.test.ts|14✔|||16.360s|
|e2e/__tests__/nativeAsyncMock.test.ts|1✔|||55ms|
|e2e/__tests__/nativeEsm.test.ts|2✔||1✖|905ms|
|e2e/__tests__/nativeEsmTypescript.test.ts|1✔|||956ms|
|e2e/__tests__/nestedEventLoop.test.ts|1✔|||1422ms|
|e2e/__tests__/nestedTestDefinitions.test.ts|4✔|||4641ms|
|e2e/__tests__/nestedEventLoop.test.ts|1✔|||1.422s|
|e2e/__tests__/nestedTestDefinitions.test.ts|4✔|||4.641s|
|e2e/__tests__/nodePath.test.ts|1✔|||866ms|
|e2e/__tests__/noTestFound.test.ts|2✔|||1063ms|
|e2e/__tests__/noTestsFound.test.ts|5✔|||2739ms|
|[e2e/__tests__/onlyChanged.test.ts](#r0s98-e2e-tests-onlyChanged-test-ts)|8✔|1❌||22281ms|
|e2e/__tests__/onlyFailuresNonWatch.test.ts|1✔|||2893ms|
|e2e/__tests__/overrideGlobals.test.ts|2✔|||2046ms|
|e2e/__tests__/pnp.test.ts|1✔|||2715ms|
|e2e/__tests__/presets.test.ts|2✔|||1966ms|
|e2e/__tests__/processExit.test.ts|1✔|||1070ms|
|e2e/__tests__/noTestFound.test.ts|2✔|||1.063s|
|e2e/__tests__/noTestsFound.test.ts|5✔|||2.739s|
|[e2e/__tests__/onlyChanged.test.ts](#r0s98)|8✔|1❌||22.281s|
|e2e/__tests__/onlyFailuresNonWatch.test.ts|1✔|||2.893s|
|e2e/__tests__/overrideGlobals.test.ts|2✔|||2.046s|
|e2e/__tests__/pnp.test.ts|1✔|||2.715s|
|e2e/__tests__/presets.test.ts|2✔|||1.966s|
|e2e/__tests__/processExit.test.ts|1✔|||1.070s|
|e2e/__tests__/promiseReject.test.ts|1✔|||967ms|
|e2e/__tests__/regexCharInPath.test.ts|1✔|||962ms|
|e2e/__tests__/requireAfterTeardown.test.ts|1✔|||921ms|
|e2e/__tests__/requireMain.test.ts|1✔|||1137ms|
|e2e/__tests__/requireMain.test.ts|1✔|||1.137s|
|e2e/__tests__/requireMainAfterCreateRequire.test.ts|1✔|||966ms|
|e2e/__tests__/requireMainIsolateModules.test.ts|1✔|||976ms|
|e2e/__tests__/requireMainResetModules.test.ts|2✔|||1961ms|
|e2e/__tests__/requireMainResetModules.test.ts|2✔|||1.961s|
|e2e/__tests__/requireV8Module.test.ts|1✔|||30ms|
|e2e/__tests__/resetModules.test.ts|1✔|||926ms|
|e2e/__tests__/resolve.test.ts|1✔|||1863ms|
|e2e/__tests__/resolveGetPaths.test.ts|1✔|||1155ms|
|e2e/__tests__/resolve.test.ts|1✔|||1.863s|
|e2e/__tests__/resolveGetPaths.test.ts|1✔|||1.155s|
|e2e/__tests__/resolveNodeModule.test.ts|1✔|||943ms|
|e2e/__tests__/resolveNoFileExtensions.test.ts|2✔|||1263ms|
|e2e/__tests__/resolveWithPaths.test.ts|1✔|||1170ms|
|e2e/__tests__/resolveNoFileExtensions.test.ts|2✔|||1.263s|
|e2e/__tests__/resolveWithPaths.test.ts|1✔|||1.170s|
|e2e/__tests__/runProgrammatically.test.ts|2✔|||575ms|
|e2e/__tests__/runTestsByPath.test.ts|1✔|||1999ms|
|e2e/__tests__/runtimeInternalModuleRegistry.test.ts|1✔|||1202ms|
|e2e/__tests__/selectProjects.test.ts|18✔|||5236ms|
|e2e/__tests__/runTestsByPath.test.ts|1✔|||1.999s|
|e2e/__tests__/runtimeInternalModuleRegistry.test.ts|1✔|||1.202s|
|e2e/__tests__/selectProjects.test.ts|18✔|||5.236s|
|e2e/__tests__/setImmediate.test.ts|1✔|||904ms|
|e2e/__tests__/setupFilesAfterEnvConfig.test.ts|2✔|||1967ms|
|e2e/__tests__/setupFilesAfterEnvConfig.test.ts|2✔|||1.967s|
|e2e/__tests__/showConfig.test.ts|1✔|||195ms|
|e2e/__tests__/skipBeforeAfterAll.test.ts|1✔|||1061ms|
|e2e/__tests__/skipBeforeAfterAll.test.ts|1✔|||1.061s|
|e2e/__tests__/snapshot-unknown.test.ts|1✔|||838ms|
|e2e/__tests__/snapshot.test.ts|9✔|||13899ms|
|e2e/__tests__/snapshot.test.ts|9✔|||13.899s|
|e2e/__tests__/snapshotMockFs.test.ts|1✔|||883ms|
|e2e/__tests__/snapshotResolver.test.ts|1✔|||823ms|
|e2e/__tests__/snapshotSerializers.test.ts|2✔|||2065ms|
|e2e/__tests__/stackTrace.test.ts|7✔|||4725ms|
|e2e/__tests__/snapshotSerializers.test.ts|2✔|||2.065s|
|e2e/__tests__/stackTrace.test.ts|7✔|||4.725s|
|e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts|1✔|||899ms|
|e2e/__tests__/stackTraceSourceMaps.test.ts|1✔|||2185ms|
|e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts|1✔|||2444ms|
|e2e/__tests__/stackTraceSourceMaps.test.ts|1✔|||2.185s|
|e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts|1✔|||2.444s|
|e2e/__tests__/supportsDashedArgs.ts|2✔|||968ms|
|e2e/__tests__/symbol.test.ts|1✔|||49ms|
|e2e/__tests__/testEnvironment.test.ts|1✔|||1628ms|
|e2e/__tests__/testEnvironmentAsync.test.ts|1✔|||1493ms|
|e2e/__tests__/testEnvironmentCircus.test.ts|1✔|||1501ms|
|e2e/__tests__/testEnvironmentCircusAsync.test.ts|1✔|||1507ms|
|e2e/__tests__/testFailureExitCode.test.ts|2✔|||4476ms|
|e2e/__tests__/testInRoot.test.ts|1✔|||1009ms|
|e2e/__tests__/testEnvironment.test.ts|1✔|||1.628s|
|e2e/__tests__/testEnvironmentAsync.test.ts|1✔|||1.493s|
|e2e/__tests__/testEnvironmentCircus.test.ts|1✔|||1.501s|
|e2e/__tests__/testEnvironmentCircusAsync.test.ts|1✔|||1.507s|
|e2e/__tests__/testFailureExitCode.test.ts|2✔|||4.476s|
|e2e/__tests__/testInRoot.test.ts|1✔|||1.009s|
|e2e/__tests__/testNamePattern.test.ts|1✔|||859ms|
|e2e/__tests__/testNamePatternSkipped.test.ts|1✔|||991ms|
|e2e/__tests__/testPathPatternReporterMessage.test.ts|1✔|||3076ms|
|e2e/__tests__/testPathPatternReporterMessage.test.ts|1✔|||3.076s|
|e2e/__tests__/testResultsProcessor.test.ts|1✔|||910ms|
|e2e/__tests__/testRetries.test.ts|4✔|||3277ms|
|e2e/__tests__/testTodo.test.ts|5✔|||3573ms|
|e2e/__tests__/timeouts.test.ts|4✔|||4029ms|
|e2e/__tests__/testRetries.test.ts|4✔|||3.277s|
|e2e/__tests__/testTodo.test.ts|5✔|||3.573s|
|e2e/__tests__/timeouts.test.ts|4✔|||4.029s|
|e2e/__tests__/timeoutsLegacy.test.ts|1✔||3✖|71ms|
|e2e/__tests__/timerResetMocks.test.ts|2✔|||1878ms|
|e2e/__tests__/timerUseRealTimers.test.ts|1✔|||1018ms|
|e2e/__tests__/toMatchInlineSnapshot.test.ts|12✔|||23917ms|
|e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts|3✔|||4670ms|
|e2e/__tests__/toMatchSnapshot.test.ts|9✔|||17025ms|
|e2e/__tests__/toMatchSnapshotWithRetries.test.ts|2✔|||4435ms|
|e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts|3✔|||3544ms|
|e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts|4✔|||3562ms|
|e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts|5✔|||3524ms|
|e2e/__tests__/transform.test.ts|16✔|||26740ms|
|e2e/__tests__/timerResetMocks.test.ts|2✔|||1.878s|
|e2e/__tests__/timerUseRealTimers.test.ts|1✔|||1.018s|
|e2e/__tests__/toMatchInlineSnapshot.test.ts|12✔|||23.917s|
|e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts|3✔|||4.670s|
|e2e/__tests__/toMatchSnapshot.test.ts|9✔|||17.025s|
|e2e/__tests__/toMatchSnapshotWithRetries.test.ts|2✔|||4.435s|
|e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts|3✔|||3.544s|
|e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts|4✔|||3.562s|
|e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts|5✔|||3.524s|
|e2e/__tests__/transform.test.ts|16✔|||26.740s|
|e2e/__tests__/transformLinkedModules.test.ts|1✔|||783ms|
|e2e/__tests__/typescriptCoverage.test.ts|1✔|||2893ms|
|e2e/__tests__/unexpectedToken.test.ts|3✔|||3411ms|
|e2e/__tests__/useStderr.test.ts|1✔|||1352ms|
|e2e/__tests__/v8Coverage.test.ts|2✔|||2412ms|
|e2e/__tests__/typescriptCoverage.test.ts|1✔|||2.893s|
|e2e/__tests__/unexpectedToken.test.ts|3✔|||3.411s|
|e2e/__tests__/useStderr.test.ts|1✔|||1.352s|
|e2e/__tests__/v8Coverage.test.ts|2✔|||2.412s|
|e2e/__tests__/verbose.test.ts|1✔|||683ms|
|e2e/__tests__/version.test.ts|1✔|||138ms|
|e2e/__tests__/watchModeNoAccess.test.ts|1✔|||4370ms|
|e2e/__tests__/watchModeOnlyFailed.test.ts|1✔|||1394ms|
|e2e/__tests__/watchModePatterns.test.ts|2✔|||3503ms|
|e2e/__tests__/watchModeUpdateSnapshot.test.ts|1✔|||1075ms|
|e2e/__tests__/workerForceExit.test.ts|2✔|||4751ms|
|e2e/__tests__/wrongEnv.test.ts|5✔|||3877ms|
|e2e/__tests__/watchModeNoAccess.test.ts|1✔|||4.370s|
|e2e/__tests__/watchModeOnlyFailed.test.ts|1✔|||1.394s|
|e2e/__tests__/watchModePatterns.test.ts|2✔|||3.503s|
|e2e/__tests__/watchModeUpdateSnapshot.test.ts|1✔|||1.075s|
|e2e/__tests__/workerForceExit.test.ts|2✔|||4.751s|
|e2e/__tests__/wrongEnv.test.ts|5✔|||3.877s|
|e2e/custom-test-sequencer/a.test.js|1✔|||29ms|
|e2e/custom-test-sequencer/b.test.js|1✔|||21ms|
|e2e/custom-test-sequencer/c.test.js|1✔|||42ms|
@ -209,7 +206,7 @@
|examples/module-mock/__tests__/mock_per_test.js|2✔|||116ms|
|examples/module-mock/__tests__/partial_mock.js|1✔|||215ms|
|examples/mongodb/__test__/db.test.js|1✔|||236ms|
|examples/react-native/__tests__/intro.test.js|4✔|||8559ms|
|examples/react-native/__tests__/intro.test.js|4✔|||8.559s|
|examples/react-testing-library/__tests__/CheckboxWithLabel-test.js|1✔|||469ms|
|examples/react/__tests__/CheckboxWithLabel-test.js|1✔|||256ms|
|examples/snapshot/__tests__/clock.react.test.js|1✔|||62ms|
@ -231,7 +228,7 @@
|packages/expect/src/__tests__/isError.test.ts|4✔|||43ms|
|packages/expect/src/__tests__/matchers-toContain.property.test.ts|2✔|||236ms|
|packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts|2✔|||287ms|
|packages/expect/src/__tests__/matchers-toEqual.property.test.ts|2✔|||1062ms|
|packages/expect/src/__tests__/matchers-toEqual.property.test.ts|2✔|||1.062s|
|packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts|3✔|||394ms|
|packages/expect/src/__tests__/matchers.test.js|592✔|||862ms|
|packages/expect/src/__tests__/spyMatchers.test.ts|248✔|||395ms|
@ -240,11 +237,11 @@
|packages/expect/src/__tests__/toEqual-dom.test.ts|12✔|||99ms|
|packages/expect/src/__tests__/toThrowMatchers.test.ts|98✔|||257ms|
|packages/expect/src/__tests__/utils.test.ts|41✔|||147ms|
|packages/jest-circus/src/__tests__/afterAll.test.ts|6✔|||5755ms|
|packages/jest-circus/src/__tests__/baseTest.test.ts|2✔|||2902ms|
|packages/jest-circus/src/__tests__/afterAll.test.ts|6✔|||5.755s|
|packages/jest-circus/src/__tests__/baseTest.test.ts|2✔|||2.902s|
|packages/jest-circus/src/__tests__/circusItTestError.test.ts|8✔|||300ms|
|packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts|3✔|||81ms|
|packages/jest-circus/src/__tests__/hooks.test.ts|3✔|||3762ms|
|packages/jest-circus/src/__tests__/hooks.test.ts|3✔|||3.762s|
|packages/jest-circus/src/__tests__/hooksError.test.ts|32✔|||127ms|
|packages/jest-cli/src/__tests__/cli/args.test.ts|17✔|||345ms|
|packages/jest-cli/src/init/__tests__/init.test.js|24✔|||119ms|
@ -264,12 +261,12 @@
|packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js|5✔|||61ms|
|packages/jest-core/src/__tests__/globals.test.ts|1✔|||22ms|
|packages/jest-core/src/__tests__/runJest.test.js|2✔|||261ms|
|packages/jest-core/src/__tests__/SearchSource.test.ts|27✔|||2596ms|
|packages/jest-core/src/__tests__/SearchSource.test.ts|27✔|||2.596s|
|packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js|13✔|||89ms|
|packages/jest-core/src/__tests__/TestScheduler.test.js|8✔|||520ms|
|packages/jest-core/src/__tests__/testSchedulerHelper.test.js|12✔|||48ms|
|packages/jest-core/src/__tests__/watch.test.js|80✔|||6755ms|
|packages/jest-core/src/__tests__/watchFileChanges.test.ts|1✔|||1514ms|
|packages/jest-core/src/__tests__/watch.test.js|80✔|||6.755s|
|packages/jest-core/src/__tests__/watchFileChanges.test.ts|1✔|||1.514s|
|packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js|2✔|||165ms|
|packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js|1✔|||246ms|
|packages/jest-core/src/lib/__tests__/isValidPath.test.ts|3✔|||166ms|
@ -292,7 +289,7 @@
|packages/jest-globals/src/__tests__/index.ts|1✔|||533ms|
|packages/jest-haste-map/src/__tests__/get_mock_name.test.js|1✔|||22ms|
|packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts|1✔|||337ms|
|packages/jest-haste-map/src/__tests__/index.test.js|44✔|||1145ms|
|packages/jest-haste-map/src/__tests__/index.test.js|44✔|||1.145s|
|packages/jest-haste-map/src/__tests__/worker.test.js|7✔|||100ms|
|packages/jest-haste-map/src/crawlers/__tests__/node.test.js|10✔|||170ms|
|packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js|8✔|||153ms|
@ -321,12 +318,12 @@
|packages/jest-message-util/src/__tests__/messages.test.ts|11✔|||205ms|
|packages/jest-mock/src/__tests__/index.test.ts|84✔|||509ms|
|packages/jest-regex-util/src/__tests__/index.test.ts|8✔|||56ms|
|packages/jest-repl/src/__tests__/jest_repl.test.js|1✔|||1172ms|
|packages/jest-repl/src/__tests__/runtime_cli.test.js|4✔|||4094ms|
|packages/jest-repl/src/__tests__/jest_repl.test.js|1✔|||1.172s|
|packages/jest-repl/src/__tests__/runtime_cli.test.js|4✔|||4.094s|
|packages/jest-reporters/src/__tests__/CoverageReporter.test.js|12✔|||397ms|
|packages/jest-reporters/src/__tests__/CoverageWorker.test.js|2✔|||199ms|
|packages/jest-reporters/src/__tests__/DefaultReporter.test.js|2✔|||148ms|
|packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js|3✔|||1129ms|
|packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js|3✔|||1.129s|
|packages/jest-reporters/src/__tests__/getResultHeader.test.js|4✔|||30ms|
|packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js|3✔|||28ms|
|packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js|4✔|||49ms|
@ -337,7 +334,7 @@
|packages/jest-reporters/src/__tests__/VerboseReporter.test.js|11✔|||425ms|
|packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts|11✔|||666ms|
|packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts|4✔|||36ms|
|packages/jest-resolve/src/__tests__/resolve.test.ts|16✔|||1308ms|
|packages/jest-resolve/src/__tests__/resolve.test.ts|16✔|||1.308s|
|packages/jest-runner/src/__tests__/testRunner.test.ts|2✔|||905ms|
|packages/jest-runtime/src/__tests__/instrumentation.test.ts|1✔|||275ms|
|packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js|3✔|||606ms|
@ -347,31 +344,31 @@
|packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js|2✔|||521ms|
|packages/jest-runtime/src/__tests__/runtime_mock.test.js|4✔|||743ms|
|packages/jest-runtime/src/__tests__/runtime_module_directories.test.js|4✔|||525ms|
|packages/jest-runtime/src/__tests__/runtime_node_path.test.js|4✔|||1088ms|
|packages/jest-runtime/src/__tests__/runtime_node_path.test.js|4✔|||1.088s|
|packages/jest-runtime/src/__tests__/runtime_require_actual.test.js|2✔|||478ms|
|packages/jest-runtime/src/__tests__/runtime_require_cache.test.js|2✔|||454ms|
|packages/jest-runtime/src/__tests__/runtime_require_mock.test.js|13✔|||962ms|
|packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js|1✔|||261ms|
|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js|6✔|||2366ms|
|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js|17✔|||1223ms|
|packages/jest-runtime/src/__tests__/runtime_require_module.test.js|27✔|||2439ms|
|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js|6✔|||2.366s|
|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js|17✔|||1.223s|
|packages/jest-runtime/src/__tests__/runtime_require_module.test.js|27✔|||2.439s|
|packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts|5✔|||707ms|
|packages/jest-runtime/src/__tests__/runtime_wrap.js|2✔|||263ms|
|packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js|1✔|||584ms|
|packages/jest-runtime/src/__tests__/Runtime-statics.test.js|2✔|||162ms|
|packages/jest-serializer/src/__tests__/index.test.ts|17✔|||158ms|
|packages/jest-snapshot/src/__tests__/dedentLines.test.ts|17✔|||94ms|
|packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts|22✔|||1149ms|
|packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts|22✔|||1.149s|
|packages/jest-snapshot/src/__tests__/matcher.test.ts|1✔|||131ms|
|packages/jest-snapshot/src/__tests__/mockSerializer.test.ts|10✔|||45ms|
|packages/jest-snapshot/src/__tests__/printSnapshot.test.ts|71✔|||1188ms|
|packages/jest-snapshot/src/__tests__/printSnapshot.test.ts|71✔|||1.188s|
|packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts|10✔|||98ms|
|packages/jest-snapshot/src/__tests__/throwMatcher.test.ts|3✔|||481ms|
|packages/jest-snapshot/src/__tests__/utils.test.ts|26✔|||214ms|
|packages/jest-source-map/src/__tests__/getCallsite.test.ts|3✔|||86ms|
|packages/jest-test-result/src/__tests__/formatTestResults.test.ts|1✔|||53ms|
|packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js|8✔|||251ms|
|packages/jest-transform/src/__tests__/ScriptTransformer.test.ts|22✔|||1660ms|
|packages/jest-transform/src/__tests__/ScriptTransformer.test.ts|22✔|||1.660s|
|packages/jest-transform/src/__tests__/shouldInstrument.test.ts|25✔|||155ms|
|packages/jest-util/src/__tests__/createProcessObject.test.ts|4✔|||81ms|
|packages/jest-util/src/__tests__/deepCyclicCopy.test.ts|12✔|||86ms|
@ -406,34 +403,32 @@
|packages/pretty-format/src/__tests__/prettyFormat.test.ts|86✔|||219ms|
|packages/pretty-format/src/__tests__/react.test.tsx|55✔|||325ms|
|packages/pretty-format/src/__tests__/ReactElement.test.ts|3✔|||64ms|
# Test Suites
## <a id="user-content-r0s75-e2e-tests-jestChangedFiles-test-ts" href="#r0s75-e2e-tests-jestChangedFiles-test-ts">e2e/__tests__/jestChangedFiles.test.ts</a>
### <a id="user-content-r0s75" href="#r0s75">e2e/__tests__/jestChangedFiles.test.ts</a>
**10** tests were completed in **9045ms** with **9** passed, **1** failed and **0** skipped.
|Result|Test|Time|
|:---:|:---|---:|
|✔️|gets hg SCM roots and dedupes them|559ms|
|✔️|gets git SCM roots and dedupes them|416ms|
|✔️|gets mixed git and hg SCM roots and dedupes them|467ms|
|✔️|gets changed files for git|2298ms|
|✔️|gets changed files for git|2.298s|
|✔️|monitors only root paths for git|151ms|
|✔️|does not find changes in files with no diff, for git|628ms|
|✔️|handles a bad revision for "changedSince", for git|878ms|
|❌|gets changed files for hg|2219ms|
|❌|gets changed files for hg|2.219s|
|✔️|monitors only root paths for hg|281ms|
|✔️|handles a bad revision for "changedSince", for hg|949ms|
## <a id="user-content-r0s98-e2e-tests-onlyChanged-test-ts" href="#r0s98-e2e-tests-onlyChanged-test-ts">e2e/__tests__/onlyChanged.test.ts</a>
### <a id="user-content-r0s98" href="#r0s98">e2e/__tests__/onlyChanged.test.ts</a>
**9** tests were completed in **22281ms** with **8** passed, **1** failed and **0** skipped.
|Result|Test|Time|
|:---:|:---|---:|
|✔️|run for "onlyChanged" and "changedSince"|1464ms|
|✔️|run only changed files|5196ms|
|✔️|report test coverage for only changed files|1889ms|
|✔️|run for "onlyChanged" and "changedSince"|1.464s|
|✔️|run only changed files|5.196s|
|✔️|report test coverage for only changed files|1.889s|
|✔️|report test coverage of source on test file change under only changed files|822ms|
|✔️|do not pickup non-tested files when reporting coverage on only changed files|861ms|
|✔️|collect test coverage when using onlyChanged|1058ms|
|✔️|onlyChanged in config is overwritten by --all or testPathPattern|7023ms|
|❌|gets changed files for hg|3765ms|
|✔️|collect test coverage when using onlyChanged|1.058s|
|✔️|onlyChanged in config is overwritten by --all or testPathPattern|7.023s|
|❌|gets changed files for hg|3.765s|
|✔️|path on Windows is case-insensitive|0ms|

View file

@ -1,6 +1,6 @@
import * as core from '@actions/core'
import {TestExecutionResult, TestRunResult, TestSuiteResult} from './test-results'
import {Align, Icon, link, table} from '../utils/markdown-utils'
import {Align, formatTime, Icon, link, table} from '../utils/markdown-utils'
import {slug} from '../utils/slugger'
export interface ReportOptions {
@ -9,35 +9,20 @@ export interface ReportOptions {
}
export function getReport(results: TestRunResult[], options: ReportOptions = {}): string {
core.info('Generating check run summary')
const maxReportLength = 65535
const sections: string[] = []
applySort(results)
const badge = getBadge(results)
const badge = getReportBadge(results)
sections.push(badge)
const runsSummary = results.map((tr, i) => getRunSummary(tr, i, options)).join('\n\n')
sections.push(runsSummary)
const runs = getTestRunsReport(results, options)
sections.push(...runs)
if (options.listTests !== 'none') {
const suitesSummary = results
.map((tr, runIndex) => {
const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites
return suites
.map((ts, suiteIndex) => getSuiteSummary(ts, runIndex, suiteIndex, options))
.filter(str => str !== '')
})
.flat()
.join('\n')
if (suitesSummary !== '') {
const suitesSection = `# Test Suites\n\n${suitesSummary}`
sections.push(suitesSection)
}
}
const report = sections.join('\n\n')
const report = sections.join('\n')
if (report.length > maxReportLength) {
let msg = `**Check Run summary limit of ${maxReportLength} chars was exceed**`
if (options.listTests !== 'all') {
@ -47,7 +32,7 @@ export function getReport(results: TestRunResult[], options: ReportOptions = {})
msg += '\n- Consider setting `list-suites` option to `only-failed`'
}
return `${badge}\n\n${msg}`
return `${badge}\n${msg}`
}
return report
@ -60,96 +45,153 @@ function applySort(results: TestRunResult[]): void {
}
}
function getBadge(results: TestRunResult[]): string {
function getReportBadge(results: TestRunResult[]): string {
const passed = results.reduce((sum, tr) => sum + tr.passed, 0)
const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0)
const failed = results.reduce((sum, tr) => sum + tr.failed, 0)
return getBadge(passed, failed, skipped)
}
function getBadge(passed: number, failed: number, skipped: number): string {
const text = []
if (passed > 0) { text.push(`${passed} passed`) }
if (failed > 0) { text.push(`${failed} failed`) }
if (skipped > 0) { text.push(`${skipped} skipped`) }
let message = text.length > 0 ? text.join(', ') : 'none'
const passedText = passed > 0 ? `${passed} passed` : null
const failedText = failed > 0 ? `${failed} failed` : null
const skippedText = skipped > 0 ? `${skipped} skipped` : null
const message = [passedText, skippedText, failedText].filter(s => s != null).join(', ') || 'none'
let color = 'success'
if (failed > 0) {
color = 'critical'
} else if (passed === 0 && failed === 0) {
color = 'yellow'
}
const hint = failed > 0 ? 'Tests failed' : 'Tests passed successfully'
const uri = encodeURIComponent(`tests-${message}-${color}`)
const text = failed > 0 ? 'Tests failed' : 'Tests passed successfully'
return `![${text}](https://img.shields.io/badge/${uri})`
return `![${hint}](https://img.shields.io/badge/${uri})`
}
function getRunSummary(tr: TestRunResult, runIndex: number, options: ReportOptions): string {
core.info('Generating check run summary')
const time = `${(tr.time / 1000).toFixed(3)}s`
const headingLine1 = `### ${tr.path}`
const headingLine2 = `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.failed}** failed and **${tr.skipped}** skipped.`
function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): string[] {
const sections: string[] = []
const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites
const suitesSummary = suites.map((s, suiteIndex) => {
const tsTime = `${Math.round(s.time)}ms`
const tsName = s.name
const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed')
const tsAddr = makeSuiteSlug(runIndex, suiteIndex, tsName).link
const tsNameLink = skipLink ? tsName : link(tsName, tsAddr)
const passed = s.passed > 0 ? `${s.passed}${Icon.success}` : ''
const failed = s.failed > 0 ? `${s.failed}${Icon.fail}` : ''
const skipped = s.skipped > 0 ? `${s.skipped}${Icon.skip}` : ''
return [tsNameLink, passed, failed, skipped, tsTime]
})
if (testRuns.length > 1) {
const tableData = testRuns.map((tr, runIndex) => {
const time = formatTime(tr.time)
const name = tr.path
const addr = makeRunSlug(runIndex).link
const nameLink = link(name, addr)
const passed = tr.passed > 0 ? `${tr.passed}${Icon.success}` : ''
const failed = tr.failed > 0 ? `${tr.failed}${Icon.fail}` : ''
const skipped = tr.skipped > 0 ? `${tr.skipped}${Icon.skip}` : ''
return [nameLink, passed, failed, skipped, time]
})
const summary =
suites.length === 0
? ''
: table(
['Suite', 'Passed', 'Failed', 'Skipped', 'Time'],
[Align.Left, Align.Right, Align.Right, Align.Right, Align.Right],
...suitesSummary
)
return [headingLine1, headingLine2, summary].join('\n\n')
}
function getSuiteSummary(ts: TestSuiteResult, runIndex: number, suiteIndex: number, options: ReportOptions): string {
const groups = options.listTests === 'failed' ? ts.failedGroups : ts.groups
if (groups.length === 0) {
return ''
const resultsTable = table(
['Report', 'Passed', 'Failed', 'Skipped', 'Time'],
[Align.Left, Align.Right, Align.Right, Align.Right, Align.Right],
...tableData
)
sections.push(resultsTable)
}
const icon = getResultIcon(ts.result)
const content = groups
.map(grp => {
const tests = options.listTests === 'failed' ? grp.failedTests : grp.tests
if (tests.length === 0) {
return ''
}
const header = grp.name ? `### ${grp.name}\n\n` : ''
const testsTable = table(
['Result', 'Test', 'Time'],
[Align.Center, Align.Left, Align.Right],
...grp.tests.map(tc => {
const name = tc.name
const time = `${Math.round(tc.time)}ms`
const result = getResultIcon(tc.result)
return [result, name, time]
})
)
return `${header}${testsTable}\n`
})
.join('\n')
const tsName = ts.name
const tsSlug = makeSuiteSlug(runIndex, suiteIndex, tsName)
const tsNameLink = `<a id="${tsSlug.id}" href="${tsSlug.link}">${tsName}</a>`
return `## ${tsNameLink} ${icon}\n\n${content}`
const suitesReports = testRuns.map((tr, i) => getSuitesReport(tr, i, options)).flat()
sections.push(...suitesReports)
return sections
}
function makeSuiteSlug(runIndex: number, suiteIndex: number, name: string): {id: string; link: string} {
function getSuitesReport(tr: TestRunResult, runIndex: number, options: ReportOptions): string[] {
const sections: string[] = []
const time = `${(tr.time / 1000).toFixed(3)}s`
const slug = makeRunSlug(runIndex)
const nameLink = `<a id="${slug.id}" href="${slug.link}">${tr.path}</a>`
const icon = getResultIcon(tr.result)
sections.push(`## ${nameLink} ${icon}`)
const headingLine2 = `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.failed}** failed and **${tr.skipped}** skipped.`
sections.push(headingLine2)
const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites
if (suites.length > 0) {
const suitesTable = table(
['Test suite', 'Passed', 'Failed', 'Skipped', 'Time'],
[Align.Left, Align.Right, Align.Right, Align.Right, Align.Right],
...suites.map((s, suiteIndex) => {
const tsTime = formatTime(s.time)
const tsName = s.name
const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed')
const tsAddr = makeSuiteSlug(runIndex, suiteIndex).link
const tsNameLink = skipLink ? tsName : link(tsName, tsAddr)
const passed = s.passed > 0 ? `${s.passed}${Icon.success}` : ''
const failed = s.failed > 0 ? `${s.failed}${Icon.fail}` : ''
const skipped = s.skipped > 0 ? `${s.skipped}${Icon.skip}` : ''
return [tsNameLink, passed, failed, skipped, tsTime]
})
)
sections.push(suitesTable)
}
if (options.listTests !== 'none') {
const tests = suites
.map((ts, suiteIndex) => getTestsReport(ts, runIndex, suiteIndex, options))
.flat()
if (tests.length > 1) {
sections.push(...tests)
}
}
return sections
}
function getTestsReport(ts: TestSuiteResult, runIndex: number, suiteIndex: number, options: ReportOptions): string[] {
const groups = options.listTests === 'failed' ? ts.failedGroups : ts.groups
if (groups.length === 0) {
return []
}
const sections: string[] = []
const tsName = ts.name
const tsSlug = makeSuiteSlug(runIndex, suiteIndex)
const tsNameLink = `<a id="${tsSlug.id}" href="${tsSlug.link}">${tsName}</a>`
const icon = getResultIcon(ts.result)
sections.push(`### ${tsNameLink} ${icon}`)
const headingLine2 = `**${ts.tests}** tests were completed in **${ts.time}ms** with **${ts.passed}** passed, **${ts.failed}** failed and **${ts.skipped}** skipped.`
sections.push(headingLine2)
for (const grp of groups) {
const tests = options.listTests === 'failed' ? grp.failedTests : grp.tests
if (tests.length === 0) {
continue
}
const grpHeader = grp.name ? `\n**${grp.name}**` : ''
const testsTable = table(
['Result', 'Test', 'Time'],
[Align.Center, Align.Left, Align.Right],
...grp.tests.map(tc => {
const name = tc.name
const time = formatTime(tc.time)
const result = getResultIcon(tc.result)
return [result, name, time]
})
)
sections.push(grpHeader, testsTable)
}
return sections
}
function makeRunSlug(runIndex: number): {id: string; link: string} {
// use prefix to avoid slug conflicts after escaping the paths
return slug(`r${runIndex}s${suiteIndex}-${name}`)
return slug(`r${runIndex}`)
}
function makeSuiteSlug(runIndex: number, suiteIndex: number): {id: string; link: string} {
// use prefix to avoid slug conflicts after escaping the paths
return slug(`r${runIndex}s${suiteIndex}`)
}
function getResultIcon(result: TestExecutionResult): string {

View file

@ -38,3 +38,11 @@ export function ellipsis(text: string, maxLength: number): string {
return text.substr(0, maxLength - 3) + '...'
}
export function formatTime(ms: number) {
if (ms > 1000) {
return `${(ms / 1000).toFixed(3)}s`
}
return `${Math.round(ms)}ms`
}