From f1fa47122964e177a0e0a2fdadfadd1e2c7e37f4 Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Fri, 28 Mar 2025 21:27:01 -0400 Subject: [PATCH] Update all tests --- __tests__/__outputs__/jest-test-results.md | 6823 ++++++++++++++++++-- __tests__/dart-json.test.ts | 64 +- __tests__/dotnet-nunit.test.ts | 64 +- __tests__/dotnet-trx.test.ts | 64 +- __tests__/java-junit.test.ts | 26 +- __tests__/jest-junit.test.ts | 64 +- __tests__/mocha-json.test.ts | 64 +- __tests__/rspec-json.test.ts | 64 +- __tests__/swift-xunit.test.ts | 64 +- dist/index.js | 7 +- src/report/get-report.ts | 6 +- 11 files changed, 6878 insertions(+), 432 deletions(-) diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 5b154f8..25dd567 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -6,406 +6,884 @@ **4239** tests were completed in **166s** with **4207** passed, **2** failed and **30** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|e2e/__tests__/asyncAndCallback.test.ts|1 ✅|||746ms| -|e2e/__tests__/asyncRegenerator.test.ts|1 ✅|||4s| -|e2e/__tests__/autoClearMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/autoResetMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/autoRestoreMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/babelPluginJestHoist.test.ts|1 ✅|||6s| -|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 ✅|||2s| -|e2e/__tests__/circularInequality.test.ts|1 ✅|||1s| -|e2e/__tests__/circusConcurrentEach.test.ts|2 ✅|||2s| -|e2e/__tests__/circusDeclarationErrors.test.ts|1 ✅|||869ms| -|e2e/__tests__/clearCache.test.ts|2 ✅|||1s| -|e2e/__tests__/cliHandlesExactFilenames.test.ts|2 ✅|||1s| -|e2e/__tests__/compareDomNodes.test.ts|1 ✅|||1s| -|e2e/__tests__/config.test.ts|6 ✅|||4s| -|e2e/__tests__/console.test.ts|7 ✅|||8s| -|e2e/__tests__/consoleAfterTeardown.test.ts|1 ✅|||1s| -|e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts|1 ✅|||793ms| -|e2e/__tests__/coverageHandlebars.test.ts|1 ✅|||2s| -|e2e/__tests__/coverageRemapping.test.ts|1 ✅|||13s| -|e2e/__tests__/coverageReport.test.ts|12 ✅|||22s| -|e2e/__tests__/coverageThreshold.test.ts|5 ✅|||5s| -|e2e/__tests__/coverageTransformInstrumented.test.ts|1 ✅|||5s| -|e2e/__tests__/coverageWithoutTransform.test.ts|1 ✅|||1s| -|e2e/__tests__/createProcessObject.test.ts|1 ✅|||908ms| -|e2e/__tests__/customInlineSnapshotMatchers.test.ts|1 ✅|||2s| -|e2e/__tests__/customMatcherStackTrace.test.ts|2 ✅|||2s| -|e2e/__tests__/customReporters.test.ts|9 ✅|||7s| -|e2e/__tests__/customResolver.test.ts|1 ✅|||826ms| -|e2e/__tests__/customTestSequencers.test.ts|3 ✅|||3s| -|e2e/__tests__/debug.test.ts|1 ✅|||899ms| -|e2e/__tests__/declarationErrors.test.ts|3 ✅|||2s| -|e2e/__tests__/dependencyClash.test.ts|1 ✅|||833ms| -|e2e/__tests__/detectOpenHandles.ts|8 ✅|||8s| -|e2e/__tests__/domDiffing.test.ts|1 ✅|||1s| -|e2e/__tests__/doneInHooks.test.ts|1 ✅|||855ms| -|e2e/__tests__/dynamicRequireDependencies.ts|1 ✅|||847ms| -|e2e/__tests__/each.test.ts|7 ✅|||5s| -|e2e/__tests__/emptyDescribeWithHooks.test.ts|4 ✅|||3s| -|e2e/__tests__/emptySuiteError.test.ts|1 ✅|||885ms| -|e2e/__tests__/env.test.ts|6 ✅|||5s| -|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 ✅|||3s| -|e2e/__tests__/expectInVm.test.ts|1 ✅|||2s| -|e2e/__tests__/extraGlobals.test.ts|1 ✅|||1s| -|e2e/__tests__/failureDetailsProperty.test.ts|1 ✅|||907ms| -|e2e/__tests__/failures.test.ts|7 ✅|||10s| -|e2e/__tests__/fakePromises.test.ts|2 ✅|||2s| -|e2e/__tests__/fatalWorkerError.test.ts|1 ✅|||3s| -|e2e/__tests__/filter.test.ts|7 ✅|||5s| -|e2e/__tests__/findRelatedFiles.test.ts|5 ✅|||6s| -|e2e/__tests__/focusedTests.test.ts|1 ✅|||888ms| -|e2e/__tests__/forceExit.test.ts|1 ✅|||2s| -|e2e/__tests__/generatorMock.test.ts|1 ✅|||1s| -|e2e/__tests__/global-mutation.test.ts|1 ✅|||40ms| -|e2e/__tests__/global.test.ts|1 ✅|||31ms| -|e2e/__tests__/globals.test.ts|10 ✅|||8s| -|e2e/__tests__/globalSetup.test.ts|10 ✅|||14s| -|e2e/__tests__/globalTeardown.test.ts|7 ✅|||12s| -|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 ✅|||1s| -|e2e/__tests__/injectGlobals.test.ts|2 ✅|||2s| -|e2e/__tests__/jasmineAsync.test.ts|15 ✅|||28s| -|e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts|1 ✅||1 ⚪|72ms| -|e2e/__tests__/jest.config.js.test.ts|3 ✅|||2s| -|e2e/__tests__/jest.config.ts.test.ts|5 ✅|||14s| +|[e2e/__tests__/asyncAndCallback.test.ts](#user-content-r0s0)|1 ✅|||746ms| +|[e2e/__tests__/asyncRegenerator.test.ts](#user-content-r0s1)|1 ✅|||4s| +|[e2e/__tests__/autoClearMocks.test.ts](#user-content-r0s2)|2 ✅|||2s| +|[e2e/__tests__/autoResetMocks.test.ts](#user-content-r0s3)|2 ✅|||2s| +|[e2e/__tests__/autoRestoreMocks.test.ts](#user-content-r0s4)|2 ✅|||2s| +|[e2e/__tests__/babelPluginJestHoist.test.ts](#user-content-r0s5)|1 ✅|||6s| +|[e2e/__tests__/badSourceMap.test.ts](#user-content-r0s6)|1 ✅|||858ms| +|[e2e/__tests__/beforeAllFiltered.ts](#user-content-r0s7)|1 ✅|||958ms| +|[e2e/__tests__/beforeEachQueue.ts](#user-content-r0s8)|1 ✅||1 ⚪|55ms| +|[e2e/__tests__/callDoneTwice.test.ts](#user-content-r0s9)|1 ✅|||882ms| +|[e2e/__tests__/chaiAssertionLibrary.ts](#user-content-r0s10)|1 ✅|||2s| +|[e2e/__tests__/circularInequality.test.ts](#user-content-r0s11)|1 ✅|||1s| +|[e2e/__tests__/circusConcurrentEach.test.ts](#user-content-r0s12)|2 ✅|||2s| +|[e2e/__tests__/circusDeclarationErrors.test.ts](#user-content-r0s13)|1 ✅|||869ms| +|[e2e/__tests__/clearCache.test.ts](#user-content-r0s14)|2 ✅|||1s| +|[e2e/__tests__/cliHandlesExactFilenames.test.ts](#user-content-r0s15)|2 ✅|||1s| +|[e2e/__tests__/compareDomNodes.test.ts](#user-content-r0s16)|1 ✅|||1s| +|[e2e/__tests__/config.test.ts](#user-content-r0s17)|6 ✅|||4s| +|[e2e/__tests__/console.test.ts](#user-content-r0s18)|7 ✅|||8s| +|[e2e/__tests__/consoleAfterTeardown.test.ts](#user-content-r0s19)|1 ✅|||1s| +|[e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts](#user-content-r0s20)|1 ✅|||793ms| +|[e2e/__tests__/coverageHandlebars.test.ts](#user-content-r0s21)|1 ✅|||2s| +|[e2e/__tests__/coverageRemapping.test.ts](#user-content-r0s22)|1 ✅|||13s| +|[e2e/__tests__/coverageReport.test.ts](#user-content-r0s23)|12 ✅|||22s| +|[e2e/__tests__/coverageThreshold.test.ts](#user-content-r0s24)|5 ✅|||5s| +|[e2e/__tests__/coverageTransformInstrumented.test.ts](#user-content-r0s25)|1 ✅|||5s| +|[e2e/__tests__/coverageWithoutTransform.test.ts](#user-content-r0s26)|1 ✅|||1s| +|[e2e/__tests__/createProcessObject.test.ts](#user-content-r0s27)|1 ✅|||908ms| +|[e2e/__tests__/customInlineSnapshotMatchers.test.ts](#user-content-r0s28)|1 ✅|||2s| +|[e2e/__tests__/customMatcherStackTrace.test.ts](#user-content-r0s29)|2 ✅|||2s| +|[e2e/__tests__/customReporters.test.ts](#user-content-r0s30)|9 ✅|||7s| +|[e2e/__tests__/customResolver.test.ts](#user-content-r0s31)|1 ✅|||826ms| +|[e2e/__tests__/customTestSequencers.test.ts](#user-content-r0s32)|3 ✅|||3s| +|[e2e/__tests__/debug.test.ts](#user-content-r0s33)|1 ✅|||899ms| +|[e2e/__tests__/declarationErrors.test.ts](#user-content-r0s34)|3 ✅|||2s| +|[e2e/__tests__/dependencyClash.test.ts](#user-content-r0s35)|1 ✅|||833ms| +|[e2e/__tests__/detectOpenHandles.ts](#user-content-r0s36)|8 ✅|||8s| +|[e2e/__tests__/domDiffing.test.ts](#user-content-r0s37)|1 ✅|||1s| +|[e2e/__tests__/doneInHooks.test.ts](#user-content-r0s38)|1 ✅|||855ms| +|[e2e/__tests__/dynamicRequireDependencies.ts](#user-content-r0s39)|1 ✅|||847ms| +|[e2e/__tests__/each.test.ts](#user-content-r0s40)|7 ✅|||5s| +|[e2e/__tests__/emptyDescribeWithHooks.test.ts](#user-content-r0s41)|4 ✅|||3s| +|[e2e/__tests__/emptySuiteError.test.ts](#user-content-r0s42)|1 ✅|||885ms| +|[e2e/__tests__/env.test.ts](#user-content-r0s43)|6 ✅|||5s| +|[e2e/__tests__/environmentAfterTeardown.test.ts](#user-content-r0s44)|1 ✅|||892ms| +|[e2e/__tests__/errorOnDeprecated.test.ts](#user-content-r0s45)|1 ✅||24 ⚪|56ms| +|[e2e/__tests__/esmConfigFile.test.ts](#user-content-r0s46)|3 ✅|||526ms| +|[e2e/__tests__/executeTestsOnceInMpr.ts](#user-content-r0s47)|1 ✅|||976ms| +|[e2e/__tests__/existentRoots.test.ts](#user-content-r0s48)|4 ✅|||627ms| +|[e2e/__tests__/expectAsyncMatcher.test.ts](#user-content-r0s49)|2 ✅|||3s| +|[e2e/__tests__/expectInVm.test.ts](#user-content-r0s50)|1 ✅|||2s| +|[e2e/__tests__/extraGlobals.test.ts](#user-content-r0s51)|1 ✅|||1s| +|[e2e/__tests__/failureDetailsProperty.test.ts](#user-content-r0s52)|1 ✅|||907ms| +|[e2e/__tests__/failures.test.ts](#user-content-r0s53)|7 ✅|||10s| +|[e2e/__tests__/fakePromises.test.ts](#user-content-r0s54)|2 ✅|||2s| +|[e2e/__tests__/fatalWorkerError.test.ts](#user-content-r0s55)|1 ✅|||3s| +|[e2e/__tests__/filter.test.ts](#user-content-r0s56)|7 ✅|||5s| +|[e2e/__tests__/findRelatedFiles.test.ts](#user-content-r0s57)|5 ✅|||6s| +|[e2e/__tests__/focusedTests.test.ts](#user-content-r0s58)|1 ✅|||888ms| +|[e2e/__tests__/forceExit.test.ts](#user-content-r0s59)|1 ✅|||2s| +|[e2e/__tests__/generatorMock.test.ts](#user-content-r0s60)|1 ✅|||1s| +|[e2e/__tests__/global-mutation.test.ts](#user-content-r0s61)|1 ✅|||40ms| +|[e2e/__tests__/global.test.ts](#user-content-r0s62)|1 ✅|||31ms| +|[e2e/__tests__/globals.test.ts](#user-content-r0s63)|10 ✅|||8s| +|[e2e/__tests__/globalSetup.test.ts](#user-content-r0s64)|10 ✅|||14s| +|[e2e/__tests__/globalTeardown.test.ts](#user-content-r0s65)|7 ✅|||12s| +|[e2e/__tests__/hasteMapMockChanged.test.ts](#user-content-r0s66)|1 ✅|||379ms| +|[e2e/__tests__/hasteMapSha1.test.ts](#user-content-r0s67)|1 ✅|||298ms| +|[e2e/__tests__/hasteMapSize.test.ts](#user-content-r0s68)|2 ✅|||397ms| +|[e2e/__tests__/importedGlobals.test.ts](#user-content-r0s69)|1 ✅|||1s| +|[e2e/__tests__/injectGlobals.test.ts](#user-content-r0s70)|2 ✅|||2s| +|[e2e/__tests__/jasmineAsync.test.ts](#user-content-r0s71)|15 ✅|||28s| +|[e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts](#user-content-r0s72)|1 ✅||1 ⚪|72ms| +|[e2e/__tests__/jest.config.js.test.ts](#user-content-r0s73)|3 ✅|||2s| +|[e2e/__tests__/jest.config.ts.test.ts](#user-content-r0s74)|5 ✅|||14s| |[e2e/__tests__/jestChangedFiles.test.ts](#user-content-r0s75)|9 ✅|1 ❌||9s| -|e2e/__tests__/jestEnvironmentJsdom.test.ts|1 ✅|||2s| -|e2e/__tests__/jestRequireActual.test.ts|1 ✅|||2s| -|e2e/__tests__/jestRequireMock.test.ts|1 ✅|||2s| -|e2e/__tests__/json.test.ts|2 ✅|||29ms| -|e2e/__tests__/jsonReporter.test.ts|2 ✅|||2s| -|e2e/__tests__/lifecycles.ts|1 ✅|||861ms| -|e2e/__tests__/listTests.test.ts|2 ✅|||945ms| -|e2e/__tests__/locationInResults.test.ts|2 ✅|||2s| -|e2e/__tests__/logHeapUsage.test.ts|1 ✅|||884ms| -|e2e/__tests__/mockNames.test.ts|8 ✅|||7s| -|e2e/__tests__/modernFakeTimers.test.ts|2 ✅|||2s| -|e2e/__tests__/moduleNameMapper.test.ts|5 ✅|||5s| -|e2e/__tests__/moduleParentNullInTest.ts|1 ✅|||886ms| -|e2e/__tests__/multiProjectRunner.test.ts|14 ✅|||16s| -|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 ✅|||1s| -|e2e/__tests__/nestedTestDefinitions.test.ts|4 ✅|||5s| -|e2e/__tests__/nodePath.test.ts|1 ✅|||866ms| -|e2e/__tests__/noTestFound.test.ts|2 ✅|||1s| -|e2e/__tests__/noTestsFound.test.ts|5 ✅|||3s| +|[e2e/__tests__/jestEnvironmentJsdom.test.ts](#user-content-r0s76)|1 ✅|||2s| +|[e2e/__tests__/jestRequireActual.test.ts](#user-content-r0s77)|1 ✅|||2s| +|[e2e/__tests__/jestRequireMock.test.ts](#user-content-r0s78)|1 ✅|||2s| +|[e2e/__tests__/json.test.ts](#user-content-r0s79)|2 ✅|||29ms| +|[e2e/__tests__/jsonReporter.test.ts](#user-content-r0s80)|2 ✅|||2s| +|[e2e/__tests__/lifecycles.ts](#user-content-r0s81)|1 ✅|||861ms| +|[e2e/__tests__/listTests.test.ts](#user-content-r0s82)|2 ✅|||945ms| +|[e2e/__tests__/locationInResults.test.ts](#user-content-r0s83)|2 ✅|||2s| +|[e2e/__tests__/logHeapUsage.test.ts](#user-content-r0s84)|1 ✅|||884ms| +|[e2e/__tests__/mockNames.test.ts](#user-content-r0s85)|8 ✅|||7s| +|[e2e/__tests__/modernFakeTimers.test.ts](#user-content-r0s86)|2 ✅|||2s| +|[e2e/__tests__/moduleNameMapper.test.ts](#user-content-r0s87)|5 ✅|||5s| +|[e2e/__tests__/moduleParentNullInTest.ts](#user-content-r0s88)|1 ✅|||886ms| +|[e2e/__tests__/multiProjectRunner.test.ts](#user-content-r0s89)|14 ✅|||16s| +|[e2e/__tests__/nativeAsyncMock.test.ts](#user-content-r0s90)|1 ✅|||55ms| +|[e2e/__tests__/nativeEsm.test.ts](#user-content-r0s91)|2 ✅||1 ⚪|905ms| +|[e2e/__tests__/nativeEsmTypescript.test.ts](#user-content-r0s92)|1 ✅|||956ms| +|[e2e/__tests__/nestedEventLoop.test.ts](#user-content-r0s93)|1 ✅|||1s| +|[e2e/__tests__/nestedTestDefinitions.test.ts](#user-content-r0s94)|4 ✅|||5s| +|[e2e/__tests__/nodePath.test.ts](#user-content-r0s95)|1 ✅|||866ms| +|[e2e/__tests__/noTestFound.test.ts](#user-content-r0s96)|2 ✅|||1s| +|[e2e/__tests__/noTestsFound.test.ts](#user-content-r0s97)|5 ✅|||3s| |[e2e/__tests__/onlyChanged.test.ts](#user-content-r0s98)|8 ✅|1 ❌||22s| -|e2e/__tests__/onlyFailuresNonWatch.test.ts|1 ✅|||3s| -|e2e/__tests__/overrideGlobals.test.ts|2 ✅|||2s| -|e2e/__tests__/pnp.test.ts|1 ✅|||3s| -|e2e/__tests__/presets.test.ts|2 ✅|||2s| -|e2e/__tests__/processExit.test.ts|1 ✅|||1s| -|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 ✅|||1s| -|e2e/__tests__/requireMainAfterCreateRequire.test.ts|1 ✅|||966ms| -|e2e/__tests__/requireMainIsolateModules.test.ts|1 ✅|||976ms| -|e2e/__tests__/requireMainResetModules.test.ts|2 ✅|||2s| -|e2e/__tests__/requireV8Module.test.ts|1 ✅|||30ms| -|e2e/__tests__/resetModules.test.ts|1 ✅|||926ms| -|e2e/__tests__/resolve.test.ts|1 ✅|||2s| -|e2e/__tests__/resolveGetPaths.test.ts|1 ✅|||1s| -|e2e/__tests__/resolveNodeModule.test.ts|1 ✅|||943ms| -|e2e/__tests__/resolveNoFileExtensions.test.ts|2 ✅|||1s| -|e2e/__tests__/resolveWithPaths.test.ts|1 ✅|||1s| -|e2e/__tests__/runProgrammatically.test.ts|2 ✅|||575ms| -|e2e/__tests__/runTestsByPath.test.ts|1 ✅|||2s| -|e2e/__tests__/runtimeInternalModuleRegistry.test.ts|1 ✅|||1s| -|e2e/__tests__/selectProjects.test.ts|18 ✅|||5s| -|e2e/__tests__/setImmediate.test.ts|1 ✅|||904ms| -|e2e/__tests__/setupFilesAfterEnvConfig.test.ts|2 ✅|||2s| -|e2e/__tests__/showConfig.test.ts|1 ✅|||195ms| -|e2e/__tests__/skipBeforeAfterAll.test.ts|1 ✅|||1s| -|e2e/__tests__/snapshot-unknown.test.ts|1 ✅|||838ms| -|e2e/__tests__/snapshot.test.ts|9 ✅|||14s| -|e2e/__tests__/snapshotMockFs.test.ts|1 ✅|||883ms| -|e2e/__tests__/snapshotResolver.test.ts|1 ✅|||823ms| -|e2e/__tests__/snapshotSerializers.test.ts|2 ✅|||2s| -|e2e/__tests__/stackTrace.test.ts|7 ✅|||5s| -|e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts|1 ✅|||899ms| -|e2e/__tests__/stackTraceSourceMaps.test.ts|1 ✅|||2s| -|e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts|1 ✅|||2s| -|e2e/__tests__/supportsDashedArgs.ts|2 ✅|||968ms| -|e2e/__tests__/symbol.test.ts|1 ✅|||49ms| -|e2e/__tests__/testEnvironment.test.ts|1 ✅|||2s| -|e2e/__tests__/testEnvironmentAsync.test.ts|1 ✅|||1s| -|e2e/__tests__/testEnvironmentCircus.test.ts|1 ✅|||2s| -|e2e/__tests__/testEnvironmentCircusAsync.test.ts|1 ✅|||2s| -|e2e/__tests__/testFailureExitCode.test.ts|2 ✅|||4s| -|e2e/__tests__/testInRoot.test.ts|1 ✅|||1s| -|e2e/__tests__/testNamePattern.test.ts|1 ✅|||859ms| -|e2e/__tests__/testNamePatternSkipped.test.ts|1 ✅|||991ms| -|e2e/__tests__/testPathPatternReporterMessage.test.ts|1 ✅|||3s| -|e2e/__tests__/testResultsProcessor.test.ts|1 ✅|||910ms| -|e2e/__tests__/testRetries.test.ts|4 ✅|||3s| -|e2e/__tests__/testTodo.test.ts|5 ✅|||4s| -|e2e/__tests__/timeouts.test.ts|4 ✅|||4s| -|e2e/__tests__/timeoutsLegacy.test.ts|1 ✅||3 ⚪|71ms| -|e2e/__tests__/timerResetMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/timerUseRealTimers.test.ts|1 ✅|||1s| -|e2e/__tests__/toMatchInlineSnapshot.test.ts|12 ✅|||24s| -|e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts|3 ✅|||5s| -|e2e/__tests__/toMatchSnapshot.test.ts|9 ✅|||17s| -|e2e/__tests__/toMatchSnapshotWithRetries.test.ts|2 ✅|||4s| -|e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts|3 ✅|||4s| -|e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts|4 ✅|||4s| -|e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts|5 ✅|||4s| -|e2e/__tests__/transform.test.ts|16 ✅|||27s| -|e2e/__tests__/transformLinkedModules.test.ts|1 ✅|||783ms| -|e2e/__tests__/typescriptCoverage.test.ts|1 ✅|||3s| -|e2e/__tests__/unexpectedToken.test.ts|3 ✅|||3s| -|e2e/__tests__/useStderr.test.ts|1 ✅|||1s| -|e2e/__tests__/v8Coverage.test.ts|2 ✅|||2s| -|e2e/__tests__/verbose.test.ts|1 ✅|||683ms| -|e2e/__tests__/version.test.ts|1 ✅|||138ms| -|e2e/__tests__/watchModeNoAccess.test.ts|1 ✅|||4s| -|e2e/__tests__/watchModeOnlyFailed.test.ts|1 ✅|||1s| -|e2e/__tests__/watchModePatterns.test.ts|2 ✅|||4s| -|e2e/__tests__/watchModeUpdateSnapshot.test.ts|1 ✅|||1s| -|e2e/__tests__/workerForceExit.test.ts|2 ✅|||5s| -|e2e/__tests__/wrongEnv.test.ts|5 ✅|||4s| -|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| -|e2e/custom-test-sequencer/d.test.js|1 ✅|||21ms| -|e2e/custom-test-sequencer/e.test.js|1 ✅|||27ms| -|e2e/test-in-root/spec.js|1 ✅|||19ms| -|e2e/test-in-root/test.js|1 ✅|||37ms| -|e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js|2 ✅|||30ms| -|e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js|1 ✅|||34ms| -|e2e/v8-coverage/empty-sourcemap/test.ts|1 ✅|||31ms| -|examples/angular/app.component.spec.ts|3 ✅|||654ms| -|examples/angular/shared/data.service.spec.ts|2 ✅|||431ms| -|examples/angular/shared/sub.service.spec.ts|1 ✅|||109ms| -|examples/async/__tests__/user.test.js|8 ✅|||96ms| -|examples/automatic-mocks/__tests__/automock.test.js|2 ✅|||74ms| -|examples/automatic-mocks/__tests__/createMockFromModule.test.js|2 ✅|||115ms| -|examples/automatic-mocks/__tests__/disableAutomocking.test.js|1 ✅|||24ms| -|examples/enzyme/__tests__/CheckboxWithLabel-test.js|1 ✅|||434ms| -|examples/getting-started/sum.test.js|1 ✅|||78ms| -|examples/jquery/__tests__/display_user.test.js|1 ✅|||196ms| -|examples/jquery/__tests__/fetch_current_user.test.js|2 ✅|||196ms| -|examples/manual-mocks/__tests__/file_summarizer.test.js|1 ✅|||87ms| -|examples/manual-mocks/__tests__/lodashMocking.test.js|1 ✅|||109ms| -|examples/manual-mocks/__tests__/user.test.js|1 ✅|||41ms| -|examples/manual-mocks/__tests__/userMocked.test.js|1 ✅|||105ms| -|examples/module-mock/__tests__/full_mock.js|1 ✅|||60ms| -|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 ✅|||9s| -|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| -|examples/snapshot/__tests__/link.react.test.js|4 ✅|||181ms| -|examples/timer/__tests__/infinite_timer_game.test.js|1 ✅|||94ms| -|examples/timer/__tests__/timer_game.test.js|3 ✅|||74ms| -|examples/typescript/__tests__/calc.test.ts|6 ✅|||276ms| -|examples/typescript/__tests__/CheckboxWithLabel-test.tsx|1 ✅|||227ms| -|examples/typescript/__tests__/sub-test.ts|1 ✅|||43ms| -|examples/typescript/__tests__/sum-test.ts|2 ✅|||69ms| -|examples/typescript/__tests__/sum.test.js|2 ✅|||100ms| -|packages/babel-jest/src/__tests__/index.ts|6 ✅|||371ms| -|packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts|4 ✅|||347ms| -|packages/diff-sequences/src/__tests__/index.property.test.ts|7 ✅|||357ms| -|packages/diff-sequences/src/__tests__/index.test.ts|48 ✅|||195ms| -|packages/expect/src/__tests__/assertionCounts.test.ts|6 ✅|||60ms| -|packages/expect/src/__tests__/asymmetricMatchers.test.ts|38 ✅|||207ms| -|packages/expect/src/__tests__/extend.test.ts|10 ✅|||99ms| -|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 ✅|||1s| -|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| -|packages/expect/src/__tests__/stacktrace.test.ts|3 ✅|||69ms| -|packages/expect/src/__tests__/symbolInObjects.test.ts|3 ✅|||33ms| -|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 ✅|||6s| -|packages/jest-circus/src/__tests__/baseTest.test.ts|2 ✅|||3s| -|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 ✅|||4s| -|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| -|packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts|4 ✅|||30ms| -|packages/jest-config/src/__tests__/Defaults.test.ts|1 ✅|||672ms| -|packages/jest-config/src/__tests__/getMaxWorkers.test.ts|7 ✅|||67ms| -|packages/jest-config/src/__tests__/normalize.test.js|118 ✅|||798ms| -|packages/jest-config/src/__tests__/readConfig.test.ts|1 ✅|||76ms| -|packages/jest-config/src/__tests__/readConfigs.test.ts|3 ✅|||135ms| -|packages/jest-config/src/__tests__/resolveConfigPath.test.ts|10 ✅|||183ms| -|packages/jest-config/src/__tests__/setFromArgv.test.ts|4 ✅|||53ms| -|packages/jest-config/src/__tests__/validatePattern.test.ts|4 ✅|||52ms| -|packages/jest-console/src/__tests__/bufferedConsole.test.ts|20 ✅|||171ms| -|packages/jest-console/src/__tests__/CustomConsole.test.ts|23 ✅|||115ms| -|packages/jest-console/src/__tests__/getConsoleOutput.test.ts|12 ✅|||56ms| -|packages/jest-core/src/__tests__/FailedTestsCache.test.js|1 ✅|||25ms| -|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 ✅|||3s| -|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 ✅|||7s| -|packages/jest-core/src/__tests__/watchFileChanges.test.ts|1 ✅|||2s| -|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| -|packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts|3 ✅|||48ms| -|packages/jest-create-cache-key-function/src/__tests__/index.test.ts|1 ✅|||75ms| -|packages/jest-diff/src/__tests__/diff.test.ts|107 ✅|||625ms| -|packages/jest-diff/src/__tests__/diffStringsRaw.test.ts|2 ✅|||55ms| -|packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts|24 ✅|||72ms| -|packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts|6 ✅|||44ms| -|packages/jest-docblock/src/__tests__/index.test.ts|36 ✅|||177ms| -|packages/jest-each/src/__tests__/array.test.ts|159 ✅|||192ms| -|packages/jest-each/src/__tests__/index.test.ts|10 ✅|||44ms| -|packages/jest-each/src/__tests__/template.test.ts|242 ✅|||483ms| -|packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts|2 ✅|||783ms| -|packages/jest-environment-node/src/__tests__/node_environment.test.ts|6 ✅|||184ms| -|packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts|50 ✅|||302ms| -|packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts|40 ✅|||317ms| -|packages/jest-get-type/src/__tests__/getType.test.ts|14 ✅|||45ms| -|packages/jest-get-type/src/__tests__/isPrimitive.test.ts|18 ✅|||36ms| -|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 ✅|||1s| -|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| -|packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js|15 ✅|||56ms| -|packages/jest-haste-map/src/lib/__tests__/fast_path.test.js|5 ✅|||29ms| -|packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js|1 ✅|||35ms| -|packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js|2 ✅|||31ms| -|packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js|2 ✅|||35ms| -|packages/jest-jasmine2/src/__tests__/concurrent.test.ts|3 ✅|||24ms| -|packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts|7 ✅|||70ms| -|packages/jest-jasmine2/src/__tests__/hooksError.test.ts|32 ✅|||51ms| -|packages/jest-jasmine2/src/__tests__/iterators.test.ts|4 ✅|||43ms| -|packages/jest-jasmine2/src/__tests__/itTestError.test.ts|6 ✅|||32ms| -|packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts|1 ✅|||23ms| -|packages/jest-jasmine2/src/__tests__/pTimeout.test.ts|3 ✅|||44ms| -|packages/jest-jasmine2/src/__tests__/queueRunner.test.ts|6 ✅|||93ms| -|packages/jest-jasmine2/src/__tests__/reporter.test.ts|1 ✅|||107ms| -|packages/jest-jasmine2/src/__tests__/Suite.test.ts|1 ✅|||84ms| -|packages/jest-jasmine2/src/__tests__/todoError.test.ts|3 ✅|||27ms| -|packages/jest-leak-detector/src/__tests__/index.test.ts|6 ✅|||986ms| -|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts|11 ✅|||49ms| -|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts|2 ✅|||48ms| -|packages/jest-matcher-utils/src/__tests__/index.test.ts|48 ✅|||391ms| -|packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts|21 ✅|||114ms| -|packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts|17 ✅|||111ms| -|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 ✅|||1s| -|packages/jest-repl/src/__tests__/runtime_cli.test.js|4 ✅|||4s| -|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 ✅|||1s| -|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| -|packages/jest-reporters/src/__tests__/getWatermarks.test.ts|2 ✅|||37ms| -|packages/jest-reporters/src/__tests__/NotifyReporter.test.ts|18 ✅|||166ms| -|packages/jest-reporters/src/__tests__/SummaryReporter.test.js|4 ✅|||366ms| -|packages/jest-reporters/src/__tests__/utils.test.ts|10 ✅|||85ms| -|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 ✅|||1s| -|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| -|packages/jest-runtime/src/__tests__/runtime_environment.test.js|2 ✅|||497ms| -|packages/jest-runtime/src/__tests__/runtime_internal_module.test.js|4 ✅|||727ms| -|packages/jest-runtime/src/__tests__/runtime_jest_fn.js|4 ✅|||479ms| -|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 ✅|||1s| -|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 ✅|||2s| -|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js|17 ✅|||1s| -|packages/jest-runtime/src/__tests__/runtime_require_module.test.js|27 ✅|||2s| -|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 ✅|||1s| -|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 ✅|||1s| -|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 ✅|||2s| -|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| -|packages/jest-util/src/__tests__/errorWithStack.test.ts|1 ✅|||41ms| -|packages/jest-util/src/__tests__/formatTime.test.ts|11 ✅|||82ms| -|packages/jest-util/src/__tests__/globsToMatcher.test.ts|4 ✅|||56ms| -|packages/jest-util/src/__tests__/installCommonGlobals.test.ts|2 ✅|||68ms| -|packages/jest-util/src/__tests__/isInteractive.test.ts|2 ✅|||35ms| -|packages/jest-util/src/__tests__/isPromise.test.ts|10 ✅|||30ms| -|packages/jest-validate/src/__tests__/validate.test.ts|23 ✅|||283ms| -|packages/jest-validate/src/__tests__/validateCLIOptions.test.js|6 ✅|||83ms| -|packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts|11 ✅|||129ms| -|packages/jest-watcher/src/lib/__tests__/prompt.test.ts|3 ✅|||91ms| -|packages/jest-watcher/src/lib/__tests__/scroll.test.ts|5 ✅|||57ms| -|packages/jest-worker/src/__tests__/Farm.test.js|10 ✅|||158ms| -|packages/jest-worker/src/__tests__/FifoQueue.test.js|3 ✅|||48ms| -|packages/jest-worker/src/__tests__/index.test.js|8 ✅|||230ms| -|packages/jest-worker/src/__tests__/PriorityQueue.test.js|5 ✅|||63ms| -|packages/jest-worker/src/__tests__/process-integration.test.js|5 ✅|||62ms| -|packages/jest-worker/src/__tests__/thread-integration.test.js|6 ✅|||114ms| -|packages/jest-worker/src/__tests__/WorkerPool.test.js|3 ✅|||51ms| -|packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js|11 ✅|||653ms| -|packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js|17 ✅|||184ms| -|packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js|15 ✅|||258ms| -|packages/jest-worker/src/workers/__tests__/processChild.test.js|10 ✅|||135ms| -|packages/jest-worker/src/workers/__tests__/threadChild.test.js|10 ✅|||120ms| -|packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts|38 ✅|||137ms| -|packages/pretty-format/src/__tests__/ConvertAnsi.test.ts|6 ✅|||43ms| -|packages/pretty-format/src/__tests__/DOMCollection.test.ts|10 ✅|||64ms| -|packages/pretty-format/src/__tests__/DOMElement.test.ts|28 ✅|||148ms| -|packages/pretty-format/src/__tests__/Immutable.test.ts|111 ✅|||443ms| -|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| +|[e2e/__tests__/onlyFailuresNonWatch.test.ts](#user-content-r0s99)|1 ✅|||3s| +|[e2e/__tests__/overrideGlobals.test.ts](#user-content-r0s100)|2 ✅|||2s| +|[e2e/__tests__/pnp.test.ts](#user-content-r0s101)|1 ✅|||3s| +|[e2e/__tests__/presets.test.ts](#user-content-r0s102)|2 ✅|||2s| +|[e2e/__tests__/processExit.test.ts](#user-content-r0s103)|1 ✅|||1s| +|[e2e/__tests__/promiseReject.test.ts](#user-content-r0s104)|1 ✅|||967ms| +|[e2e/__tests__/regexCharInPath.test.ts](#user-content-r0s105)|1 ✅|||962ms| +|[e2e/__tests__/requireAfterTeardown.test.ts](#user-content-r0s106)|1 ✅|||921ms| +|[e2e/__tests__/requireMain.test.ts](#user-content-r0s107)|1 ✅|||1s| +|[e2e/__tests__/requireMainAfterCreateRequire.test.ts](#user-content-r0s108)|1 ✅|||966ms| +|[e2e/__tests__/requireMainIsolateModules.test.ts](#user-content-r0s109)|1 ✅|||976ms| +|[e2e/__tests__/requireMainResetModules.test.ts](#user-content-r0s110)|2 ✅|||2s| +|[e2e/__tests__/requireV8Module.test.ts](#user-content-r0s111)|1 ✅|||30ms| +|[e2e/__tests__/resetModules.test.ts](#user-content-r0s112)|1 ✅|||926ms| +|[e2e/__tests__/resolve.test.ts](#user-content-r0s113)|1 ✅|||2s| +|[e2e/__tests__/resolveGetPaths.test.ts](#user-content-r0s114)|1 ✅|||1s| +|[e2e/__tests__/resolveNodeModule.test.ts](#user-content-r0s115)|1 ✅|||943ms| +|[e2e/__tests__/resolveNoFileExtensions.test.ts](#user-content-r0s116)|2 ✅|||1s| +|[e2e/__tests__/resolveWithPaths.test.ts](#user-content-r0s117)|1 ✅|||1s| +|[e2e/__tests__/runProgrammatically.test.ts](#user-content-r0s118)|2 ✅|||575ms| +|[e2e/__tests__/runTestsByPath.test.ts](#user-content-r0s119)|1 ✅|||2s| +|[e2e/__tests__/runtimeInternalModuleRegistry.test.ts](#user-content-r0s120)|1 ✅|||1s| +|[e2e/__tests__/selectProjects.test.ts](#user-content-r0s121)|18 ✅|||5s| +|[e2e/__tests__/setImmediate.test.ts](#user-content-r0s122)|1 ✅|||904ms| +|[e2e/__tests__/setupFilesAfterEnvConfig.test.ts](#user-content-r0s123)|2 ✅|||2s| +|[e2e/__tests__/showConfig.test.ts](#user-content-r0s124)|1 ✅|||195ms| +|[e2e/__tests__/skipBeforeAfterAll.test.ts](#user-content-r0s125)|1 ✅|||1s| +|[e2e/__tests__/snapshot-unknown.test.ts](#user-content-r0s126)|1 ✅|||838ms| +|[e2e/__tests__/snapshot.test.ts](#user-content-r0s127)|9 ✅|||14s| +|[e2e/__tests__/snapshotMockFs.test.ts](#user-content-r0s128)|1 ✅|||883ms| +|[e2e/__tests__/snapshotResolver.test.ts](#user-content-r0s129)|1 ✅|||823ms| +|[e2e/__tests__/snapshotSerializers.test.ts](#user-content-r0s130)|2 ✅|||2s| +|[e2e/__tests__/stackTrace.test.ts](#user-content-r0s131)|7 ✅|||5s| +|[e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts](#user-content-r0s132)|1 ✅|||899ms| +|[e2e/__tests__/stackTraceSourceMaps.test.ts](#user-content-r0s133)|1 ✅|||2s| +|[e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts](#user-content-r0s134)|1 ✅|||2s| +|[e2e/__tests__/supportsDashedArgs.ts](#user-content-r0s135)|2 ✅|||968ms| +|[e2e/__tests__/symbol.test.ts](#user-content-r0s136)|1 ✅|||49ms| +|[e2e/__tests__/testEnvironment.test.ts](#user-content-r0s137)|1 ✅|||2s| +|[e2e/__tests__/testEnvironmentAsync.test.ts](#user-content-r0s138)|1 ✅|||1s| +|[e2e/__tests__/testEnvironmentCircus.test.ts](#user-content-r0s139)|1 ✅|||2s| +|[e2e/__tests__/testEnvironmentCircusAsync.test.ts](#user-content-r0s140)|1 ✅|||2s| +|[e2e/__tests__/testFailureExitCode.test.ts](#user-content-r0s141)|2 ✅|||4s| +|[e2e/__tests__/testInRoot.test.ts](#user-content-r0s142)|1 ✅|||1s| +|[e2e/__tests__/testNamePattern.test.ts](#user-content-r0s143)|1 ✅|||859ms| +|[e2e/__tests__/testNamePatternSkipped.test.ts](#user-content-r0s144)|1 ✅|||991ms| +|[e2e/__tests__/testPathPatternReporterMessage.test.ts](#user-content-r0s145)|1 ✅|||3s| +|[e2e/__tests__/testResultsProcessor.test.ts](#user-content-r0s146)|1 ✅|||910ms| +|[e2e/__tests__/testRetries.test.ts](#user-content-r0s147)|4 ✅|||3s| +|[e2e/__tests__/testTodo.test.ts](#user-content-r0s148)|5 ✅|||4s| +|[e2e/__tests__/timeouts.test.ts](#user-content-r0s149)|4 ✅|||4s| +|[e2e/__tests__/timeoutsLegacy.test.ts](#user-content-r0s150)|1 ✅||3 ⚪|71ms| +|[e2e/__tests__/timerResetMocks.test.ts](#user-content-r0s151)|2 ✅|||2s| +|[e2e/__tests__/timerUseRealTimers.test.ts](#user-content-r0s152)|1 ✅|||1s| +|[e2e/__tests__/toMatchInlineSnapshot.test.ts](#user-content-r0s153)|12 ✅|||24s| +|[e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts](#user-content-r0s154)|3 ✅|||5s| +|[e2e/__tests__/toMatchSnapshot.test.ts](#user-content-r0s155)|9 ✅|||17s| +|[e2e/__tests__/toMatchSnapshotWithRetries.test.ts](#user-content-r0s156)|2 ✅|||4s| +|[e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts](#user-content-r0s157)|3 ✅|||4s| +|[e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts](#user-content-r0s158)|4 ✅|||4s| +|[e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts](#user-content-r0s159)|5 ✅|||4s| +|[e2e/__tests__/transform.test.ts](#user-content-r0s160)|16 ✅|||27s| +|[e2e/__tests__/transformLinkedModules.test.ts](#user-content-r0s161)|1 ✅|||783ms| +|[e2e/__tests__/typescriptCoverage.test.ts](#user-content-r0s162)|1 ✅|||3s| +|[e2e/__tests__/unexpectedToken.test.ts](#user-content-r0s163)|3 ✅|||3s| +|[e2e/__tests__/useStderr.test.ts](#user-content-r0s164)|1 ✅|||1s| +|[e2e/__tests__/v8Coverage.test.ts](#user-content-r0s165)|2 ✅|||2s| +|[e2e/__tests__/verbose.test.ts](#user-content-r0s166)|1 ✅|||683ms| +|[e2e/__tests__/version.test.ts](#user-content-r0s167)|1 ✅|||138ms| +|[e2e/__tests__/watchModeNoAccess.test.ts](#user-content-r0s168)|1 ✅|||4s| +|[e2e/__tests__/watchModeOnlyFailed.test.ts](#user-content-r0s169)|1 ✅|||1s| +|[e2e/__tests__/watchModePatterns.test.ts](#user-content-r0s170)|2 ✅|||4s| +|[e2e/__tests__/watchModeUpdateSnapshot.test.ts](#user-content-r0s171)|1 ✅|||1s| +|[e2e/__tests__/workerForceExit.test.ts](#user-content-r0s172)|2 ✅|||5s| +|[e2e/__tests__/wrongEnv.test.ts](#user-content-r0s173)|5 ✅|||4s| +|[e2e/custom-test-sequencer/a.test.js](#user-content-r0s174)|1 ✅|||29ms| +|[e2e/custom-test-sequencer/b.test.js](#user-content-r0s175)|1 ✅|||21ms| +|[e2e/custom-test-sequencer/c.test.js](#user-content-r0s176)|1 ✅|||42ms| +|[e2e/custom-test-sequencer/d.test.js](#user-content-r0s177)|1 ✅|||21ms| +|[e2e/custom-test-sequencer/e.test.js](#user-content-r0s178)|1 ✅|||27ms| +|[e2e/test-in-root/spec.js](#user-content-r0s179)|1 ✅|||19ms| +|[e2e/test-in-root/test.js](#user-content-r0s180)|1 ✅|||37ms| +|[e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js](#user-content-r0s181)|2 ✅|||30ms| +|[e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js](#user-content-r0s182)|1 ✅|||34ms| +|[e2e/v8-coverage/empty-sourcemap/test.ts](#user-content-r0s183)|1 ✅|||31ms| +|[examples/angular/app.component.spec.ts](#user-content-r0s184)|3 ✅|||654ms| +|[examples/angular/shared/data.service.spec.ts](#user-content-r0s185)|2 ✅|||431ms| +|[examples/angular/shared/sub.service.spec.ts](#user-content-r0s186)|1 ✅|||109ms| +|[examples/async/__tests__/user.test.js](#user-content-r0s187)|8 ✅|||96ms| +|[examples/automatic-mocks/__tests__/automock.test.js](#user-content-r0s188)|2 ✅|||74ms| +|[examples/automatic-mocks/__tests__/createMockFromModule.test.js](#user-content-r0s189)|2 ✅|||115ms| +|[examples/automatic-mocks/__tests__/disableAutomocking.test.js](#user-content-r0s190)|1 ✅|||24ms| +|[examples/enzyme/__tests__/CheckboxWithLabel-test.js](#user-content-r0s191)|1 ✅|||434ms| +|[examples/getting-started/sum.test.js](#user-content-r0s192)|1 ✅|||78ms| +|[examples/jquery/__tests__/display_user.test.js](#user-content-r0s193)|1 ✅|||196ms| +|[examples/jquery/__tests__/fetch_current_user.test.js](#user-content-r0s194)|2 ✅|||196ms| +|[examples/manual-mocks/__tests__/file_summarizer.test.js](#user-content-r0s195)|1 ✅|||87ms| +|[examples/manual-mocks/__tests__/lodashMocking.test.js](#user-content-r0s196)|1 ✅|||109ms| +|[examples/manual-mocks/__tests__/user.test.js](#user-content-r0s197)|1 ✅|||41ms| +|[examples/manual-mocks/__tests__/userMocked.test.js](#user-content-r0s198)|1 ✅|||105ms| +|[examples/module-mock/__tests__/full_mock.js](#user-content-r0s199)|1 ✅|||60ms| +|[examples/module-mock/__tests__/mock_per_test.js](#user-content-r0s200)|2 ✅|||116ms| +|[examples/module-mock/__tests__/partial_mock.js](#user-content-r0s201)|1 ✅|||215ms| +|[examples/mongodb/__test__/db.test.js](#user-content-r0s202)|1 ✅|||236ms| +|[examples/react-native/__tests__/intro.test.js](#user-content-r0s203)|4 ✅|||9s| +|[examples/react-testing-library/__tests__/CheckboxWithLabel-test.js](#user-content-r0s204)|1 ✅|||469ms| +|[examples/react/__tests__/CheckboxWithLabel-test.js](#user-content-r0s205)|1 ✅|||256ms| +|[examples/snapshot/__tests__/clock.react.test.js](#user-content-r0s206)|1 ✅|||62ms| +|[examples/snapshot/__tests__/link.react.test.js](#user-content-r0s207)|4 ✅|||181ms| +|[examples/timer/__tests__/infinite_timer_game.test.js](#user-content-r0s208)|1 ✅|||94ms| +|[examples/timer/__tests__/timer_game.test.js](#user-content-r0s209)|3 ✅|||74ms| +|[examples/typescript/__tests__/calc.test.ts](#user-content-r0s210)|6 ✅|||276ms| +|[examples/typescript/__tests__/CheckboxWithLabel-test.tsx](#user-content-r0s211)|1 ✅|||227ms| +|[examples/typescript/__tests__/sub-test.ts](#user-content-r0s212)|1 ✅|||43ms| +|[examples/typescript/__tests__/sum-test.ts](#user-content-r0s213)|2 ✅|||69ms| +|[examples/typescript/__tests__/sum.test.js](#user-content-r0s214)|2 ✅|||100ms| +|[packages/babel-jest/src/__tests__/index.ts](#user-content-r0s215)|6 ✅|||371ms| +|[packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts](#user-content-r0s216)|4 ✅|||347ms| +|[packages/diff-sequences/src/__tests__/index.property.test.ts](#user-content-r0s217)|7 ✅|||357ms| +|[packages/diff-sequences/src/__tests__/index.test.ts](#user-content-r0s218)|48 ✅|||195ms| +|[packages/expect/src/__tests__/assertionCounts.test.ts](#user-content-r0s219)|6 ✅|||60ms| +|[packages/expect/src/__tests__/asymmetricMatchers.test.ts](#user-content-r0s220)|38 ✅|||207ms| +|[packages/expect/src/__tests__/extend.test.ts](#user-content-r0s221)|10 ✅|||99ms| +|[packages/expect/src/__tests__/isError.test.ts](#user-content-r0s222)|4 ✅|||43ms| +|[packages/expect/src/__tests__/matchers-toContain.property.test.ts](#user-content-r0s223)|2 ✅|||236ms| +|[packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts](#user-content-r0s224)|2 ✅|||287ms| +|[packages/expect/src/__tests__/matchers-toEqual.property.test.ts](#user-content-r0s225)|2 ✅|||1s| +|[packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts](#user-content-r0s226)|3 ✅|||394ms| +|[packages/expect/src/__tests__/matchers.test.js](#user-content-r0s227)|592 ✅|||862ms| +|[packages/expect/src/__tests__/spyMatchers.test.ts](#user-content-r0s228)|248 ✅|||395ms| +|[packages/expect/src/__tests__/stacktrace.test.ts](#user-content-r0s229)|3 ✅|||69ms| +|[packages/expect/src/__tests__/symbolInObjects.test.ts](#user-content-r0s230)|3 ✅|||33ms| +|[packages/expect/src/__tests__/toEqual-dom.test.ts](#user-content-r0s231)|12 ✅|||99ms| +|[packages/expect/src/__tests__/toThrowMatchers.test.ts](#user-content-r0s232)|98 ✅|||257ms| +|[packages/expect/src/__tests__/utils.test.ts](#user-content-r0s233)|41 ✅|||147ms| +|[packages/jest-circus/src/__tests__/afterAll.test.ts](#user-content-r0s234)|6 ✅|||6s| +|[packages/jest-circus/src/__tests__/baseTest.test.ts](#user-content-r0s235)|2 ✅|||3s| +|[packages/jest-circus/src/__tests__/circusItTestError.test.ts](#user-content-r0s236)|8 ✅|||300ms| +|[packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts](#user-content-r0s237)|3 ✅|||81ms| +|[packages/jest-circus/src/__tests__/hooks.test.ts](#user-content-r0s238)|3 ✅|||4s| +|[packages/jest-circus/src/__tests__/hooksError.test.ts](#user-content-r0s239)|32 ✅|||127ms| +|[packages/jest-cli/src/__tests__/cli/args.test.ts](#user-content-r0s240)|17 ✅|||345ms| +|[packages/jest-cli/src/init/__tests__/init.test.js](#user-content-r0s241)|24 ✅|||119ms| +|[packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts](#user-content-r0s242)|4 ✅|||30ms| +|[packages/jest-config/src/__tests__/Defaults.test.ts](#user-content-r0s243)|1 ✅|||672ms| +|[packages/jest-config/src/__tests__/getMaxWorkers.test.ts](#user-content-r0s244)|7 ✅|||67ms| +|[packages/jest-config/src/__tests__/normalize.test.js](#user-content-r0s245)|118 ✅|||798ms| +|[packages/jest-config/src/__tests__/readConfig.test.ts](#user-content-r0s246)|1 ✅|||76ms| +|[packages/jest-config/src/__tests__/readConfigs.test.ts](#user-content-r0s247)|3 ✅|||135ms| +|[packages/jest-config/src/__tests__/resolveConfigPath.test.ts](#user-content-r0s248)|10 ✅|||183ms| +|[packages/jest-config/src/__tests__/setFromArgv.test.ts](#user-content-r0s249)|4 ✅|||53ms| +|[packages/jest-config/src/__tests__/validatePattern.test.ts](#user-content-r0s250)|4 ✅|||52ms| +|[packages/jest-console/src/__tests__/bufferedConsole.test.ts](#user-content-r0s251)|20 ✅|||171ms| +|[packages/jest-console/src/__tests__/CustomConsole.test.ts](#user-content-r0s252)|23 ✅|||115ms| +|[packages/jest-console/src/__tests__/getConsoleOutput.test.ts](#user-content-r0s253)|12 ✅|||56ms| +|[packages/jest-core/src/__tests__/FailedTestsCache.test.js](#user-content-r0s254)|1 ✅|||25ms| +|[packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js](#user-content-r0s255)|5 ✅|||61ms| +|[packages/jest-core/src/__tests__/globals.test.ts](#user-content-r0s256)|1 ✅|||22ms| +|[packages/jest-core/src/__tests__/runJest.test.js](#user-content-r0s257)|2 ✅|||261ms| +|[packages/jest-core/src/__tests__/SearchSource.test.ts](#user-content-r0s258)|27 ✅|||3s| +|[packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js](#user-content-r0s259)|13 ✅|||89ms| +|[packages/jest-core/src/__tests__/TestScheduler.test.js](#user-content-r0s260)|8 ✅|||520ms| +|[packages/jest-core/src/__tests__/testSchedulerHelper.test.js](#user-content-r0s261)|12 ✅|||48ms| +|[packages/jest-core/src/__tests__/watch.test.js](#user-content-r0s262)|80 ✅|||7s| +|[packages/jest-core/src/__tests__/watchFileChanges.test.ts](#user-content-r0s263)|1 ✅|||2s| +|[packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js](#user-content-r0s264)|2 ✅|||165ms| +|[packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js](#user-content-r0s265)|1 ✅|||246ms| +|[packages/jest-core/src/lib/__tests__/isValidPath.test.ts](#user-content-r0s266)|3 ✅|||166ms| +|[packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts](#user-content-r0s267)|3 ✅|||48ms| +|[packages/jest-create-cache-key-function/src/__tests__/index.test.ts](#user-content-r0s268)|1 ✅|||75ms| +|[packages/jest-diff/src/__tests__/diff.test.ts](#user-content-r0s269)|107 ✅|||625ms| +|[packages/jest-diff/src/__tests__/diffStringsRaw.test.ts](#user-content-r0s270)|2 ✅|||55ms| +|[packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts](#user-content-r0s271)|24 ✅|||72ms| +|[packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts](#user-content-r0s272)|6 ✅|||44ms| +|[packages/jest-docblock/src/__tests__/index.test.ts](#user-content-r0s273)|36 ✅|||177ms| +|[packages/jest-each/src/__tests__/array.test.ts](#user-content-r0s274)|159 ✅|||192ms| +|[packages/jest-each/src/__tests__/index.test.ts](#user-content-r0s275)|10 ✅|||44ms| +|[packages/jest-each/src/__tests__/template.test.ts](#user-content-r0s276)|242 ✅|||483ms| +|[packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts](#user-content-r0s277)|2 ✅|||783ms| +|[packages/jest-environment-node/src/__tests__/node_environment.test.ts](#user-content-r0s278)|6 ✅|||184ms| +|[packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts](#user-content-r0s279)|50 ✅|||302ms| +|[packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts](#user-content-r0s280)|40 ✅|||317ms| +|[packages/jest-get-type/src/__tests__/getType.test.ts](#user-content-r0s281)|14 ✅|||45ms| +|[packages/jest-get-type/src/__tests__/isPrimitive.test.ts](#user-content-r0s282)|18 ✅|||36ms| +|[packages/jest-globals/src/__tests__/index.ts](#user-content-r0s283)|1 ✅|||533ms| +|[packages/jest-haste-map/src/__tests__/get_mock_name.test.js](#user-content-r0s284)|1 ✅|||22ms| +|[packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts](#user-content-r0s285)|1 ✅|||337ms| +|[packages/jest-haste-map/src/__tests__/index.test.js](#user-content-r0s286)|44 ✅|||1s| +|[packages/jest-haste-map/src/__tests__/worker.test.js](#user-content-r0s287)|7 ✅|||100ms| +|[packages/jest-haste-map/src/crawlers/__tests__/node.test.js](#user-content-r0s288)|10 ✅|||170ms| +|[packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js](#user-content-r0s289)|8 ✅|||153ms| +|[packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js](#user-content-r0s290)|15 ✅|||56ms| +|[packages/jest-haste-map/src/lib/__tests__/fast_path.test.js](#user-content-r0s291)|5 ✅|||29ms| +|[packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js](#user-content-r0s292)|1 ✅|||35ms| +|[packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js](#user-content-r0s293)|2 ✅|||31ms| +|[packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js](#user-content-r0s294)|2 ✅|||35ms| +|[packages/jest-jasmine2/src/__tests__/concurrent.test.ts](#user-content-r0s295)|3 ✅|||24ms| +|[packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts](#user-content-r0s296)|7 ✅|||70ms| +|[packages/jest-jasmine2/src/__tests__/hooksError.test.ts](#user-content-r0s297)|32 ✅|||51ms| +|[packages/jest-jasmine2/src/__tests__/iterators.test.ts](#user-content-r0s298)|4 ✅|||43ms| +|[packages/jest-jasmine2/src/__tests__/itTestError.test.ts](#user-content-r0s299)|6 ✅|||32ms| +|[packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts](#user-content-r0s300)|1 ✅|||23ms| +|[packages/jest-jasmine2/src/__tests__/pTimeout.test.ts](#user-content-r0s301)|3 ✅|||44ms| +|[packages/jest-jasmine2/src/__tests__/queueRunner.test.ts](#user-content-r0s302)|6 ✅|||93ms| +|[packages/jest-jasmine2/src/__tests__/reporter.test.ts](#user-content-r0s303)|1 ✅|||107ms| +|[packages/jest-jasmine2/src/__tests__/Suite.test.ts](#user-content-r0s304)|1 ✅|||84ms| +|[packages/jest-jasmine2/src/__tests__/todoError.test.ts](#user-content-r0s305)|3 ✅|||27ms| +|[packages/jest-leak-detector/src/__tests__/index.test.ts](#user-content-r0s306)|6 ✅|||986ms| +|[packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts](#user-content-r0s307)|11 ✅|||49ms| +|[packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts](#user-content-r0s308)|2 ✅|||48ms| +|[packages/jest-matcher-utils/src/__tests__/index.test.ts](#user-content-r0s309)|48 ✅|||391ms| +|[packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts](#user-content-r0s310)|21 ✅|||114ms| +|[packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts](#user-content-r0s311)|17 ✅|||111ms| +|[packages/jest-message-util/src/__tests__/messages.test.ts](#user-content-r0s312)|11 ✅|||205ms| +|[packages/jest-mock/src/__tests__/index.test.ts](#user-content-r0s313)|84 ✅|||509ms| +|[packages/jest-regex-util/src/__tests__/index.test.ts](#user-content-r0s314)|8 ✅|||56ms| +|[packages/jest-repl/src/__tests__/jest_repl.test.js](#user-content-r0s315)|1 ✅|||1s| +|[packages/jest-repl/src/__tests__/runtime_cli.test.js](#user-content-r0s316)|4 ✅|||4s| +|[packages/jest-reporters/src/__tests__/CoverageReporter.test.js](#user-content-r0s317)|12 ✅|||397ms| +|[packages/jest-reporters/src/__tests__/CoverageWorker.test.js](#user-content-r0s318)|2 ✅|||199ms| +|[packages/jest-reporters/src/__tests__/DefaultReporter.test.js](#user-content-r0s319)|2 ✅|||148ms| +|[packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js](#user-content-r0s320)|3 ✅|||1s| +|[packages/jest-reporters/src/__tests__/getResultHeader.test.js](#user-content-r0s321)|4 ✅|||30ms| +|[packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js](#user-content-r0s322)|3 ✅|||28ms| +|[packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js](#user-content-r0s323)|4 ✅|||49ms| +|[packages/jest-reporters/src/__tests__/getWatermarks.test.ts](#user-content-r0s324)|2 ✅|||37ms| +|[packages/jest-reporters/src/__tests__/NotifyReporter.test.ts](#user-content-r0s325)|18 ✅|||166ms| +|[packages/jest-reporters/src/__tests__/SummaryReporter.test.js](#user-content-r0s326)|4 ✅|||366ms| +|[packages/jest-reporters/src/__tests__/utils.test.ts](#user-content-r0s327)|10 ✅|||85ms| +|[packages/jest-reporters/src/__tests__/VerboseReporter.test.js](#user-content-r0s328)|11 ✅|||425ms| +|[packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts](#user-content-r0s329)|11 ✅|||666ms| +|[packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts](#user-content-r0s330)|4 ✅|||36ms| +|[packages/jest-resolve/src/__tests__/resolve.test.ts](#user-content-r0s331)|16 ✅|||1s| +|[packages/jest-runner/src/__tests__/testRunner.test.ts](#user-content-r0s332)|2 ✅|||905ms| +|[packages/jest-runtime/src/__tests__/instrumentation.test.ts](#user-content-r0s333)|1 ✅|||275ms| +|[packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js](#user-content-r0s334)|3 ✅|||606ms| +|[packages/jest-runtime/src/__tests__/runtime_environment.test.js](#user-content-r0s335)|2 ✅|||497ms| +|[packages/jest-runtime/src/__tests__/runtime_internal_module.test.js](#user-content-r0s336)|4 ✅|||727ms| +|[packages/jest-runtime/src/__tests__/runtime_jest_fn.js](#user-content-r0s337)|4 ✅|||479ms| +|[packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js](#user-content-r0s338)|2 ✅|||521ms| +|[packages/jest-runtime/src/__tests__/runtime_mock.test.js](#user-content-r0s339)|4 ✅|||743ms| +|[packages/jest-runtime/src/__tests__/runtime_module_directories.test.js](#user-content-r0s340)|4 ✅|||525ms| +|[packages/jest-runtime/src/__tests__/runtime_node_path.test.js](#user-content-r0s341)|4 ✅|||1s| +|[packages/jest-runtime/src/__tests__/runtime_require_actual.test.js](#user-content-r0s342)|2 ✅|||478ms| +|[packages/jest-runtime/src/__tests__/runtime_require_cache.test.js](#user-content-r0s343)|2 ✅|||454ms| +|[packages/jest-runtime/src/__tests__/runtime_require_mock.test.js](#user-content-r0s344)|13 ✅|||962ms| +|[packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js](#user-content-r0s345)|1 ✅|||261ms| +|[packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js](#user-content-r0s346)|6 ✅|||2s| +|[packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js](#user-content-r0s347)|17 ✅|||1s| +|[packages/jest-runtime/src/__tests__/runtime_require_module.test.js](#user-content-r0s348)|27 ✅|||2s| +|[packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts](#user-content-r0s349)|5 ✅|||707ms| +|[packages/jest-runtime/src/__tests__/runtime_wrap.js](#user-content-r0s350)|2 ✅|||263ms| +|[packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js](#user-content-r0s351)|1 ✅|||584ms| +|[packages/jest-runtime/src/__tests__/Runtime-statics.test.js](#user-content-r0s352)|2 ✅|||162ms| +|[packages/jest-serializer/src/__tests__/index.test.ts](#user-content-r0s353)|17 ✅|||158ms| +|[packages/jest-snapshot/src/__tests__/dedentLines.test.ts](#user-content-r0s354)|17 ✅|||94ms| +|[packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts](#user-content-r0s355)|22 ✅|||1s| +|[packages/jest-snapshot/src/__tests__/matcher.test.ts](#user-content-r0s356)|1 ✅|||131ms| +|[packages/jest-snapshot/src/__tests__/mockSerializer.test.ts](#user-content-r0s357)|10 ✅|||45ms| +|[packages/jest-snapshot/src/__tests__/printSnapshot.test.ts](#user-content-r0s358)|71 ✅|||1s| +|[packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts](#user-content-r0s359)|10 ✅|||98ms| +|[packages/jest-snapshot/src/__tests__/throwMatcher.test.ts](#user-content-r0s360)|3 ✅|||481ms| +|[packages/jest-snapshot/src/__tests__/utils.test.ts](#user-content-r0s361)|26 ✅|||214ms| +|[packages/jest-source-map/src/__tests__/getCallsite.test.ts](#user-content-r0s362)|3 ✅|||86ms| +|[packages/jest-test-result/src/__tests__/formatTestResults.test.ts](#user-content-r0s363)|1 ✅|||53ms| +|[packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js](#user-content-r0s364)|8 ✅|||251ms| +|[packages/jest-transform/src/__tests__/ScriptTransformer.test.ts](#user-content-r0s365)|22 ✅|||2s| +|[packages/jest-transform/src/__tests__/shouldInstrument.test.ts](#user-content-r0s366)|25 ✅|||155ms| +|[packages/jest-util/src/__tests__/createProcessObject.test.ts](#user-content-r0s367)|4 ✅|||81ms| +|[packages/jest-util/src/__tests__/deepCyclicCopy.test.ts](#user-content-r0s368)|12 ✅|||86ms| +|[packages/jest-util/src/__tests__/errorWithStack.test.ts](#user-content-r0s369)|1 ✅|||41ms| +|[packages/jest-util/src/__tests__/formatTime.test.ts](#user-content-r0s370)|11 ✅|||82ms| +|[packages/jest-util/src/__tests__/globsToMatcher.test.ts](#user-content-r0s371)|4 ✅|||56ms| +|[packages/jest-util/src/__tests__/installCommonGlobals.test.ts](#user-content-r0s372)|2 ✅|||68ms| +|[packages/jest-util/src/__tests__/isInteractive.test.ts](#user-content-r0s373)|2 ✅|||35ms| +|[packages/jest-util/src/__tests__/isPromise.test.ts](#user-content-r0s374)|10 ✅|||30ms| +|[packages/jest-validate/src/__tests__/validate.test.ts](#user-content-r0s375)|23 ✅|||283ms| +|[packages/jest-validate/src/__tests__/validateCLIOptions.test.js](#user-content-r0s376)|6 ✅|||83ms| +|[packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts](#user-content-r0s377)|11 ✅|||129ms| +|[packages/jest-watcher/src/lib/__tests__/prompt.test.ts](#user-content-r0s378)|3 ✅|||91ms| +|[packages/jest-watcher/src/lib/__tests__/scroll.test.ts](#user-content-r0s379)|5 ✅|||57ms| +|[packages/jest-worker/src/__tests__/Farm.test.js](#user-content-r0s380)|10 ✅|||158ms| +|[packages/jest-worker/src/__tests__/FifoQueue.test.js](#user-content-r0s381)|3 ✅|||48ms| +|[packages/jest-worker/src/__tests__/index.test.js](#user-content-r0s382)|8 ✅|||230ms| +|[packages/jest-worker/src/__tests__/PriorityQueue.test.js](#user-content-r0s383)|5 ✅|||63ms| +|[packages/jest-worker/src/__tests__/process-integration.test.js](#user-content-r0s384)|5 ✅|||62ms| +|[packages/jest-worker/src/__tests__/thread-integration.test.js](#user-content-r0s385)|6 ✅|||114ms| +|[packages/jest-worker/src/__tests__/WorkerPool.test.js](#user-content-r0s386)|3 ✅|||51ms| +|[packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js](#user-content-r0s387)|11 ✅|||653ms| +|[packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js](#user-content-r0s388)|17 ✅|||184ms| +|[packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js](#user-content-r0s389)|15 ✅|||258ms| +|[packages/jest-worker/src/workers/__tests__/processChild.test.js](#user-content-r0s390)|10 ✅|||135ms| +|[packages/jest-worker/src/workers/__tests__/threadChild.test.js](#user-content-r0s391)|10 ✅|||120ms| +|[packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts](#user-content-r0s392)|38 ✅|||137ms| +|[packages/pretty-format/src/__tests__/ConvertAnsi.test.ts](#user-content-r0s393)|6 ✅|||43ms| +|[packages/pretty-format/src/__tests__/DOMCollection.test.ts](#user-content-r0s394)|10 ✅|||64ms| +|[packages/pretty-format/src/__tests__/DOMElement.test.ts](#user-content-r0s395)|28 ✅|||148ms| +|[packages/pretty-format/src/__tests__/Immutable.test.ts](#user-content-r0s396)|111 ✅|||443ms| +|[packages/pretty-format/src/__tests__/prettyFormat.test.ts](#user-content-r0s397)|86 ✅|||219ms| +|[packages/pretty-format/src/__tests__/react.test.tsx](#user-content-r0s398)|55 ✅|||325ms| +|[packages/pretty-format/src/__tests__/ReactElement.test.ts](#user-content-r0s399)|3 ✅|||64ms| +### ✅ e2e/__tests__/asyncAndCallback.test.ts +``` +✅ errors when a test both returns a promise and takes a callback +``` +### ✅ e2e/__tests__/asyncRegenerator.test.ts +``` +✅ successfully transpiles async +``` +### ✅ e2e/__tests__/autoClearMocks.test.ts +``` +✅ suite with auto-clear +✅ suite without auto-clear +``` +### ✅ e2e/__tests__/autoResetMocks.test.ts +``` +✅ suite with auto-reset +✅ suite without auto-reset +``` +### ✅ e2e/__tests__/autoRestoreMocks.test.ts +``` +✅ suite with auto-restore +✅ suite without auto-restore +``` +### ✅ e2e/__tests__/babelPluginJestHoist.test.ts +``` +✅ successfully runs the tests inside `babel-plugin-jest-hoist/` +``` +### ✅ e2e/__tests__/badSourceMap.test.ts +``` +✅ suite with test cases that contain malformed sourcemaps +``` +### ✅ e2e/__tests__/beforeAllFiltered.ts +``` +Correct BeforeAll run + ✅ ensures the BeforeAll of ignored suite is not run +``` +### ✅ e2e/__tests__/beforeEachQueue.ts +``` +✅ does not work on jest-circus +Correct beforeEach order + ⚪ ensures the correct order for beforeEach +``` +### ✅ e2e/__tests__/callDoneTwice.test.ts +``` +✅ `done()` should not be called more than once +``` +### ✅ e2e/__tests__/chaiAssertionLibrary.ts +``` +✅ chai assertion errors should display properly +``` +### ✅ e2e/__tests__/circularInequality.test.ts +``` +✅ handles circular inequality properly +``` +### ✅ e2e/__tests__/circusConcurrentEach.test.ts +``` +✅ works with concurrent.each +✅ works with concurrent.only.each +``` +### ✅ e2e/__tests__/circusDeclarationErrors.test.ts +``` +✅ defining tests and hooks asynchronously throws +``` +### ✅ e2e/__tests__/clearCache.test.ts +``` +jest --clearCache + ✅ normal run results in cache directory being written + ✅ clearCache results in deleted directory and exitCode 0 +``` +### ✅ e2e/__tests__/cliHandlesExactFilenames.test.ts +``` +✅ CLI accepts exact file names if matchers matched +✅ CLI skips exact file names if no matchers matched +``` +### ✅ e2e/__tests__/compareDomNodes.test.ts +``` +✅ does not crash when expect involving a DOM node fails +``` +### ✅ e2e/__tests__/config.test.ts +``` +✅ config as JSON +✅ works with sane config JSON +✅ watchman config option is respected over default argv +✅ config from argv is respected with sane config JSON +✅ works with jsdom testEnvironmentOptions config JSON +✅ negated flags override previous flags +``` +### ✅ e2e/__tests__/console.test.ts +``` +✅ console printing +✅ console printing with --verbose +✅ does not print to console with --silent +✅ respects --noStackTrace +✅ respects noStackTrace in config +✅ the jsdom console is the same as the test console +✅ does not error out when using winston +``` +### ✅ e2e/__tests__/consoleAfterTeardown.test.ts +``` +✅ console printing +``` +### ✅ e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts +``` +✅ prints console.logs when run with forceExit +``` +### ✅ e2e/__tests__/coverageHandlebars.test.ts +``` +✅ code coverage for Handlebars +``` +### ✅ e2e/__tests__/coverageRemapping.test.ts +``` +✅ maps code coverage against original source +``` +### ✅ e2e/__tests__/coverageReport.test.ts +``` +✅ outputs coverage report +✅ collects coverage only from specified file +✅ collects coverage only from multiple specified files +✅ collects coverage only from specified files avoiding dependencies +✅ json reporter printing with --coverage +✅ outputs coverage report as json +✅ outputs coverage report when text is requested +✅ outputs coverage report when text-summary is requested +✅ outputs coverage report when text and text-summary is requested +✅ does not output coverage report when html is requested +✅ collects coverage from duplicate files avoiding shared cache +✅ generates coverage when using the testRegex config param +``` +### ✅ e2e/__tests__/coverageThreshold.test.ts +``` +✅ exits with 1 if coverage threshold is not met +✅ exits with 1 if path threshold group is not found in coverage data +✅ exits with 0 if global threshold group is not found in coverage data +✅ excludes tests matched by path threshold groups from global group +✅ file is matched by all path and glob threshold groups +``` +### ✅ e2e/__tests__/coverageTransformInstrumented.test.ts +``` +✅ code coverage for transform instrumented code +``` +### ✅ e2e/__tests__/coverageWithoutTransform.test.ts +``` +✅ produces code coverage for uncovered files without transformer +``` +### ✅ e2e/__tests__/createProcessObject.test.ts +``` +✅ allows retrieving the current domain +``` +### ✅ e2e/__tests__/customInlineSnapshotMatchers.test.ts +``` +✅ works with custom inline snapshot matchers +``` +### ✅ e2e/__tests__/customMatcherStackTrace.test.ts +``` +✅ works with custom matchers +✅ custom async matchers +``` +### ✅ e2e/__tests__/customReporters.test.ts +``` +Custom Reporters Integration + ✅ valid string format for adding reporters + ✅ valid array format for adding reporters + ✅ invalid format for adding reporters + ✅ default reporters enabled + ✅ TestReporter with all tests passing + ✅ TestReporter with all tests failing + ✅ IncompleteReporter for flexibility + ✅ reporters can be default exports + ✅ prints reporter errors +``` +### ✅ e2e/__tests__/customResolver.test.ts +``` +✅ use the custom resolver +``` +### ✅ e2e/__tests__/customTestSequencers.test.ts +``` +✅ run prioritySequence first sync +✅ run prioritySequence first async +✅ run failed tests async +``` +### ✅ e2e/__tests__/debug.test.ts +``` +jest --debug + ✅ outputs debugging info before running the test +``` +### ✅ e2e/__tests__/declarationErrors.test.ts +``` +✅ errors if describe returns a Promise +✅ errors if describe returns something +✅ errors if describe throws +``` +### ✅ e2e/__tests__/dependencyClash.test.ts +``` +✅ does not require project modules from inside node_modules +``` +### ✅ e2e/__tests__/detectOpenHandles.ts +``` +✅ prints message about flag on slow tests +✅ prints message about flag on forceExit +✅ prints out info about open handlers +✅ does not report promises +✅ prints out info about open handlers from inside tests +on node >=11.10.0 + ✅ does not report ELD histograms +notify + ✅ does not report --notify flag +on node >=11 + ✅ does not report timeouts using unref +``` +### ✅ e2e/__tests__/domDiffing.test.ts +``` +✅ should work without error +``` +### ✅ e2e/__tests__/doneInHooks.test.ts +``` +✅ `done()` works properly in hooks +``` +### ✅ e2e/__tests__/dynamicRequireDependencies.ts +``` +✅ successfully runs tests with dynamic dependencies +``` +### ✅ e2e/__tests__/each.test.ts +``` +✅ works with passing tests +✅ shows error message when not enough arguments are supplied to tests +✅ shows the correct errors in stderr when failing tests +✅ shows only the tests with .only as being ran +✅ shows only the tests without .skip as being ran +✅ runs only the describe.only.each tests +✅ formats args with pretty format when given %p +``` +### ✅ e2e/__tests__/emptyDescribeWithHooks.test.ts +``` +✅ hook in empty describe +✅ hook in describe with skipped test +✅ hook in empty nested describe +✅ multiple hooks in empty describe +``` +### ✅ e2e/__tests__/emptySuiteError.test.ts +``` +JSON Reporter + ✅ fails the test suite if it contains no tests +``` +### ✅ e2e/__tests__/env.test.ts +``` +Environment override + ✅ uses jsdom when specified + ✅ uses node as default from package.json + ✅ uses node when specified + ✅ fails when the env is not available +Environment equivalent + ✅ uses jsdom + ✅ uses node +``` +### ✅ e2e/__tests__/environmentAfterTeardown.test.ts +``` +✅ prints useful error for environment methods after test is done +``` +### ✅ e2e/__tests__/errorOnDeprecated.test.ts +``` +✅ does not work on jest-circus +⚪ fail.test.js errors in errorOnDeprecated mode +⚪ jasmine.addMatchers.test.js errors in errorOnDeprecated mode +⚪ jasmine.any.test.js errors in errorOnDeprecated mode +⚪ jasmine.anything.test.js errors in errorOnDeprecated mode +⚪ jasmine.arrayContaining.test.js errors in errorOnDeprecated mode +⚪ jasmine.createSpy.test.js errors in errorOnDeprecated mode +⚪ jasmine.objectContaining.test.js errors in errorOnDeprecated mode +⚪ jasmine.stringMatching.test.js errors in errorOnDeprecated mode +⚪ pending.test.js errors in errorOnDeprecated mode +⚪ spyOn.test.js errors in errorOnDeprecated mode +⚪ spyOnProperty.test.js errors in errorOnDeprecated mode +⚪ defaultTimeoutInterval.test.js errors in errorOnDeprecated mode +⚪ fail.test.js errors when not in errorOnDeprecated mode +⚪ jasmine.addMatchers.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.any.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.anything.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.arrayContaining.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.createSpy.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.objectContaining.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.stringMatching.test.js passes when not in errorOnDeprecated mode +⚪ pending.test.js passes when not in errorOnDeprecated mode +⚪ spyOn.test.js passes when not in errorOnDeprecated mode +⚪ spyOnProperty.test.js errors when not in errorOnDeprecated mode +⚪ defaultTimeoutInterval.test.js passes when not in errorOnDeprecated mode +``` +### ✅ e2e/__tests__/esmConfigFile.test.ts +``` +✅ reads config from cjs file +on node ^12.17.0 || >=13.2.0 + ✅ reads config from mjs file + ✅ reads config from js file when package.json#type=module +``` +### ✅ e2e/__tests__/executeTestsOnceInMpr.ts +``` +✅ Tests are executed only once even in an MPR +``` +### ✅ e2e/__tests__/existentRoots.test.ts +``` +✅ error when rootDir does not exist +✅ error when rootDir is a file +✅ error when roots directory does not exist +✅ error when roots is a file +``` +### ✅ e2e/__tests__/expectAsyncMatcher.test.ts +``` +✅ works with passing tests +✅ shows the correct errors in stderr when failing tests +``` +### ✅ e2e/__tests__/expectInVm.test.ts +``` +✅ expect works correctly with RegExps created inside a VM +``` +### ✅ e2e/__tests__/extraGlobals.test.ts +``` +✅ works with injected globals +``` +### ✅ e2e/__tests__/failureDetailsProperty.test.ts +``` +✅ that the failureDetails property is set +``` +### ✅ e2e/__tests__/failures.test.ts +``` +✅ not throwing Error objects +✅ works with node assert +✅ works with assertions in separate files +✅ works with async failures +✅ works with snapshot failures +✅ works with snapshot failures with hint +✅ errors after test has completed +``` +### ✅ e2e/__tests__/fakePromises.test.ts +``` +Fake promises + ✅ should be possible to resolve with fake timers using immediates + ✅ should be possible to resolve with fake timers using asap +``` +### ✅ e2e/__tests__/fatalWorkerError.test.ts +``` +✅ fails a test that terminates the worker with a fatal error +``` +### ✅ e2e/__tests__/filter.test.ts +``` +Dynamic test filtering + ✅ uses the default JSON option + ✅ uses the CLI option + ✅ ignores the filter if requested to do so + ✅ throws when you return clowny stuff + ✅ will call setup on filter before filtering + ✅ will print error when filter throws + ✅ will return no results when setup hook throws +``` +### ✅ e2e/__tests__/findRelatedFiles.test.ts +``` +--findRelatedTests flag + ✅ runs tests related to filename + ✅ runs tests related to uppercased filename on case-insensitive os + ✅ runs tests related to filename with a custom dependency extractor + ✅ generates coverage report for filename + ✅ coverage configuration is applied correctly +``` +### ✅ e2e/__tests__/focusedTests.test.ts +``` +✅ runs only "it.only" tests +``` +### ✅ e2e/__tests__/forceExit.test.ts +``` +✅ exits the process after test are done but before timers complete +``` +### ✅ e2e/__tests__/generatorMock.test.ts +``` +✅ mock works with generator +``` +### ✅ e2e/__tests__/global-mutation.test.ts +``` +✅ can redefine global +``` +### ✅ e2e/__tests__/global.test.ts +``` +✅ globals are properly defined +``` +### ✅ e2e/__tests__/globals.test.ts +``` +✅ basic test constructs +✅ interleaved describe and test children order +✅ skips +✅ only +✅ cannot have describe with no implementation +✅ cannot test with no implementation +✅ skips with expand arg +✅ only with expand arg +✅ cannot test with no implementation with expand arg +✅ function as descriptor +``` +### ✅ e2e/__tests__/globalSetup.test.ts +``` +✅ globalSetup is triggered once before all test suites +✅ jest throws an error when globalSetup does not export a function +✅ globalSetup function gets jest config object as a parameter +✅ should call globalSetup function of multiple projects +✅ should not call a globalSetup of a project if there are no tests to run from this project +✅ should not call any globalSetup if there are no tests to run +✅ globalSetup works with default export +✅ globalSetup throws with named export +✅ should not transpile the transformer +✅ should transform node_modules if configured by transformIgnorePatterns +``` +### ✅ e2e/__tests__/globalTeardown.test.ts +``` +✅ globalTeardown is triggered once after all test suites +✅ jest throws an error when globalTeardown does not export a function +✅ globalTeardown function gets jest config object as a parameter +✅ should call globalTeardown function of multiple projects +✅ should not call a globalTeardown of a project if there are no tests to run from this project +✅ globalTeardown works with default export +✅ globalTeardown throws with named export +``` +### ✅ e2e/__tests__/hasteMapMockChanged.test.ts +``` +✅ should not warn when a mock file changes +``` +### ✅ e2e/__tests__/hasteMapSha1.test.ts +``` +✅ exits the process after test are done but before timers complete +``` +### ✅ e2e/__tests__/hasteMapSize.test.ts +``` +✅ reports the correct file size +✅ updates the file size when a file changes +``` +### ✅ e2e/__tests__/importedGlobals.test.ts +``` +✅ imported globals +``` +### ✅ e2e/__tests__/injectGlobals.test.ts +``` +✅ globals are undefined if passed `false` from CLI +✅ globals are undefined if passed `false` from config +``` +### ✅ e2e/__tests__/jasmineAsync.test.ts +``` +async jasmine + ✅ works with beforeAll + ✅ works with beforeEach + ✅ works with afterAll + ✅ works with afterEach + ✅ works with fit + ✅ works with xit + ✅ throws when not a promise is returned + ✅ tests async promise code + ✅ works with concurrent + ✅ works with concurrent within a describe block when invoked with testNamePattern + ✅ works with concurrent.each + ✅ works with concurrent.only.each + ✅ doesn't execute more than 5 tests simultaneously + ✅ async test fails + ✅ generator test +``` +### ✅ e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts +``` +async jasmine with pending during test + ✅ does not work on jest-circus + ⚪ should be reported as a pending test +``` +### ✅ e2e/__tests__/jest.config.js.test.ts +``` +✅ works with jest.config.js +✅ traverses directory tree up until it finds jest.config +✅ invalid JS in jest.config.js +``` +### ✅ e2e/__tests__/jest.config.ts.test.ts +``` +✅ works with jest.config.ts +✅ works with tsconfig.json +✅ traverses directory tree up until it finds jest.config +✅ it does type check the config +✅ invalid JS in jest.config.ts +``` ### ❌ e2e/__tests__/jestChangedFiles.test.ts ``` ✅ gets hg SCM roots and dedupes them @@ -420,6 +898,143 @@ ✅ monitors only root paths for hg ✅ handles a bad revision for "changedSince", for hg ``` +### ✅ e2e/__tests__/jestEnvironmentJsdom.test.ts +``` +✅ check is not leaking memory +``` +### ✅ e2e/__tests__/jestRequireActual.test.ts +``` +✅ understands dependencies using jest.requireActual +``` +### ✅ e2e/__tests__/jestRequireMock.test.ts +``` +✅ understands dependencies using jest.requireMock +``` +### ✅ e2e/__tests__/json.test.ts +``` +✅ JSON is available in the global scope +✅ JSON.parse creates objects from within this context +``` +### ✅ e2e/__tests__/jsonReporter.test.ts +``` +JSON Reporter + ✅ writes test result to sum.result.json + ✅ outputs coverage report +``` +### ✅ e2e/__tests__/lifecycles.ts +``` +✅ suite with invalid assertions in afterAll +``` +### ✅ e2e/__tests__/listTests.test.ts +``` +--listTests flag + ✅ causes tests to be printed in different lines + ✅ causes tests to be printed out as JSON when using the --json flag +``` +### ✅ e2e/__tests__/locationInResults.test.ts +``` +✅ defaults to null for location +✅ adds correct location info when provided with flag +``` +### ✅ e2e/__tests__/logHeapUsage.test.ts +``` +✅ logs memory usage +``` +### ✅ e2e/__tests__/mockNames.test.ts +``` +✅ suite without mock name, mock called +✅ suite without mock name, mock not called +✅ suite with mock name, expect mock not called +✅ suite with mock name, mock called, expect fail +✅ suite with mock name, mock called 5 times +✅ suite with mock name, mock not called 5 times, expect fail +✅ suite with mock name, mock called +✅ suite with mock name, mock not called +``` +### ✅ e2e/__tests__/modernFakeTimers.test.ts +``` +modern implementation of fake timers + ✅ should be possible to use modern implementation from config + ✅ should be possible to use modern implementation from jest-object +``` +### ✅ e2e/__tests__/moduleNameMapper.test.ts +``` +✅ moduleNameMapper wrong configuration +✅ moduleNameMapper wrong array configuration +✅ moduleNameMapper correct configuration +✅ moduleNameMapper correct configuration mocking module of absolute path +✅ moduleNameMapper with mocking +``` +### ✅ e2e/__tests__/moduleParentNullInTest.ts +``` +✅ module.parent should be null in test files +``` +### ✅ e2e/__tests__/multiProjectRunner.test.ts +``` +✅ --listTests doesn't duplicate the test files +✅ can pass projects or global config +✅ "No tests found" message for projects +✅ allows a single non-root project +✅ allows a single non-root project +✅ correctly runs a single non-root project +✅ correctly runs a single non-root project +✅ projects can be workspaces with non-JS/JSON files +✅ objects in project configuration +✅ allows a single project +✅ resolves projects and their properly +✅ Does transform files with the corresponding project transformer +doesn't bleed module file extensions resolution with multiple workers + ✅ external config files + ✅ inline config files +``` +### ✅ e2e/__tests__/nativeAsyncMock.test.ts +``` +✅ mocks async functions +``` +### ✅ e2e/__tests__/nativeEsm.test.ts +``` +✅ test config is without transform +on node ^12.16.0 || >=13.7.0 + ✅ runs test with native ESM +on node >=14.3.0 + ⚪ supports top-level await +``` +### ✅ e2e/__tests__/nativeEsmTypescript.test.ts +``` +on node ^12.16.0 || >=13.7.0 + ✅ runs TS test with native ESM +``` +### ✅ e2e/__tests__/nestedEventLoop.test.ts +``` +✅ works with nested event loops +``` +### ✅ e2e/__tests__/nestedTestDefinitions.test.ts +``` +✅ print correct error message with nested test definitions outside describe +✅ print correct error message with nested test definitions inside describe +✅ print correct message when nesting describe inside it +✅ print correct message when nesting a hook inside it +``` +### ✅ e2e/__tests__/nodePath.test.ts +``` +✅ supports NODE_PATH +``` +### ✅ e2e/__tests__/noTestFound.test.ts +``` +Coverage Report + ✅ outputs coverage report +File path not found in mulit-project scenario + ✅ outputs coverage report +``` +### ✅ e2e/__tests__/noTestsFound.test.ts +``` +No tests are found + ✅ fails the test suite in standard situation + ✅ doesn't fail the test suite if --passWithNoTests passed + ✅ doesn't fail the test suite if using --lastCommit + ✅ doesn't fail the test suite if using --onlyChanged + ✅ doesn't fail the test suite if using --findRelatedTests +``` ### ❌ e2e/__tests__/onlyChanged.test.ts ``` ✅ run for "onlyChanged" and "changedSince" @@ -432,4 +1047,5416 @@ ❌ gets changed files for hg Error: expect(received).toMatch(expected) ✅ path on Windows is case-insensitive +``` +### ✅ e2e/__tests__/onlyFailuresNonWatch.test.ts +``` +✅ onlyFailures flag works in non-watch mode +``` +### ✅ e2e/__tests__/overrideGlobals.test.ts +``` +✅ overriding native promise does not freeze Jest +✅ has a duration even if time is faked +``` +### ✅ e2e/__tests__/pnp.test.ts +``` +✅ successfully runs the tests inside `pnp/` +``` +### ✅ e2e/__tests__/presets.test.ts +``` +✅ supports json preset +✅ supports js preset +``` +### ✅ e2e/__tests__/processExit.test.ts +``` +✅ prints stack trace pointing to process.exit call +``` +### ✅ e2e/__tests__/promiseReject.test.ts +``` +✅ +``` +### ✅ e2e/__tests__/regexCharInPath.test.ts +``` +Regex Char In Path + ✅ parses paths containing regex chars correctly +``` +### ✅ e2e/__tests__/requireAfterTeardown.test.ts +``` +✅ prints useful error for requires after test is done +``` +### ✅ e2e/__tests__/requireMain.test.ts +``` +✅ provides `require.main` set to test suite module +``` +### ✅ e2e/__tests__/requireMainAfterCreateRequire.test.ts +``` +on node >=12.2.0 + ✅ `require.main` not undefined after createRequire +``` +### ✅ e2e/__tests__/requireMainIsolateModules.test.ts +``` +✅ `require.main` on using `jest.isolateModules` should not be undefined +``` +### ✅ e2e/__tests__/requireMainResetModules.test.ts +``` +✅ `require.main` on using `--resetModules='true'` should not be undefined +✅ `require.main` on using `jest.resetModules()` should not be undefined +``` +### ✅ e2e/__tests__/requireV8Module.test.ts +``` +✅ v8 module +``` +### ✅ e2e/__tests__/resetModules.test.ts +``` +✅ jest.resetModules should not error when _isMockFunction is defined but not boolean +``` +### ✅ e2e/__tests__/resolve.test.ts +``` +✅ resolve platform modules +``` +### ✅ e2e/__tests__/resolveGetPaths.test.ts +``` +✅ require.resolve.paths +``` +### ✅ e2e/__tests__/resolveNodeModule.test.ts +``` +✅ resolve node module +``` +### ✅ e2e/__tests__/resolveNoFileExtensions.test.ts +``` +✅ show error message with matching files +✅ show error message when no js moduleFileExtensions +``` +### ✅ e2e/__tests__/resolveWithPaths.test.ts +``` +✅ require.resolve with paths +``` +### ✅ e2e/__tests__/runProgrammatically.test.ts +``` +✅ run Jest programmatically cjs +✅ run Jest programmatically esm +``` +### ✅ e2e/__tests__/runTestsByPath.test.ts +``` +✅ runs tests by exact path +``` +### ✅ e2e/__tests__/runtimeInternalModuleRegistry.test.ts +``` +Runtime Internal Module Registry + ✅ correctly makes use of internal module registry when requiring modules +``` +### ✅ e2e/__tests__/selectProjects.test.ts +``` +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects first-project` + ✅ runs the tests in the first project only + ✅ prints that only first-project will run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects second-project` + ✅ runs the tests in the second project only + ✅ prints that only second-project will run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects first-project second-project` + ✅ runs the tests in the first and second projects + ✅ prints that both first-project and second-project will run +Given a config with two named projects, first-project and second-project when Jest is started without providing `--selectProjects` + ✅ runs the tests in the first and second projects + ✅ does not print which projects are run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects third-project` + ✅ fails + ✅ prints that no project was found +Given a config with two projects, first-project and an unnamed project when Jest is started with `--selectProjects first-project` + ✅ runs the tests in the first project only + ✅ prints that a project does not have a name + ✅ prints that only first-project will run +Given a config with two projects, first-project and an unnamed project when Jest is started without providing `--selectProjects` + ✅ runs the tests in the first and second projects + ✅ does not print that a project has no name +Given a config with two projects, first-project and an unnamed project when Jest is started with `--selectProjects third-project` + ✅ fails + ✅ prints that a project does not have a name + ✅ prints that no project was found +``` +### ✅ e2e/__tests__/setImmediate.test.ts +``` +✅ setImmediate +``` +### ✅ e2e/__tests__/setupFilesAfterEnvConfig.test.ts +``` +setupFilesAfterEnv + ✅ requires multiple setup files before each file in the suite + ✅ requires setup files *after* the test runners are required +``` +### ✅ e2e/__tests__/showConfig.test.ts +``` +✅ --showConfig outputs config info and exits +``` +### ✅ e2e/__tests__/skipBeforeAfterAll.test.ts +``` +✅ correctly skip `beforeAll`s in skipped tests +``` +### ✅ e2e/__tests__/snapshot-unknown.test.ts +``` +Snapshot serializers + ✅ renders snapshot +``` +### ✅ e2e/__tests__/snapshot.test.ts +``` +Snapshot + ✅ stores new snapshots on the first run + ✅ works with escaped characters + ✅ works with escaped regex + ✅ works with template literal substitutions +Snapshot Validation + ✅ does not save snapshots in CI mode by default + ✅ works on subsequent runs without `-u` + ✅ deletes the snapshot if the test suite has been removed + ✅ deletes a snapshot when a test does removes all the snapshots + ✅ updates the snapshot when a test removes some snapshots +``` +### ✅ e2e/__tests__/snapshotMockFs.test.ts +``` +✅ store snapshot even if fs is mocked +``` +### ✅ e2e/__tests__/snapshotResolver.test.ts +``` +Custom snapshot resolver + ✅ Resolves snapshot files using custom resolver +``` +### ✅ e2e/__tests__/snapshotSerializers.test.ts +``` +Snapshot serializers + ✅ renders snapshot + ✅ compares snapshots correctly +``` +### ✅ e2e/__tests__/stackTrace.test.ts +``` +Stack Trace + ✅ prints a stack trace for runtime errors + ✅ does not print a stack trace for runtime errors when --noStackTrace is given + ✅ prints a stack trace for matching errors + ✅ does not print a stack trace for matching errors when --noStackTrace is given + ✅ prints a stack trace for errors + ✅ prints a stack trace for errors without message in stack trace + ✅ does not print a stack trace for errors when --noStackTrace is given +``` +### ✅ e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts +``` +✅ prints a usable stack trace even if no Error.captureStackTrace +``` +### ✅ e2e/__tests__/stackTraceSourceMaps.test.ts +``` +✅ processes stack traces and code frames with source maps +``` +### ✅ e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts +``` +✅ processes stack traces and code frames with source maps with coverage +``` +### ✅ e2e/__tests__/supportsDashedArgs.ts +``` +✅ works with passing tests +✅ throws error for unknown dashed & camelcase args +``` +### ✅ e2e/__tests__/symbol.test.ts +``` +✅ Symbol deletion +``` +### ✅ e2e/__tests__/testEnvironment.test.ts +``` +✅ respects testEnvironment docblock +``` +### ✅ e2e/__tests__/testEnvironmentAsync.test.ts +``` +✅ triggers setup/teardown hooks +``` +### ✅ e2e/__tests__/testEnvironmentCircus.test.ts +``` +✅ calls testEnvironment handleTestEvent +``` +### ✅ e2e/__tests__/testEnvironmentCircusAsync.test.ts +``` +✅ calls asynchronous handleTestEvent in testEnvironment +``` +### ✅ e2e/__tests__/testFailureExitCode.test.ts +``` +✅ exits with a specified code when test fail +✅ exits with a specified code when bailing from a failed test +``` +### ✅ e2e/__tests__/testInRoot.test.ts +``` +✅ runs tests in only test.js and spec.js +``` +### ✅ e2e/__tests__/testNamePattern.test.ts +``` +✅ testNamePattern +``` +### ✅ e2e/__tests__/testNamePatternSkipped.test.ts +``` +✅ testNamePattern skipped +``` +### ✅ e2e/__tests__/testPathPatternReporterMessage.test.ts +``` +✅ prints a message with path pattern at the end +``` +### ✅ e2e/__tests__/testResultsProcessor.test.ts +``` +✅ testNamePattern +``` +### ✅ e2e/__tests__/testRetries.test.ts +``` +Test Retries + ✅ retries failed tests + ✅ reporter shows more than 1 invocation if test is retried + ✅ reporter shows 1 invocation if tests are not retried + ✅ tests are not retried if beforeAll hook failure occurs +``` +### ✅ e2e/__tests__/testTodo.test.ts +``` +✅ works with all statuses +✅ shows error messages when called with no arguments +✅ shows error messages when called with multiple arguments +✅ shows error messages when called with invalid argument +✅ shows todo messages when in verbose mode +``` +### ✅ e2e/__tests__/timeouts.test.ts +``` +✅ exceeds the timeout +✅ does not exceed the timeout +✅ exceeds the command line testTimeout +✅ does not exceed the command line testTimeout +``` +### ✅ e2e/__tests__/timeoutsLegacy.test.ts +``` +✅ does not work on jest-circus +⚪ exceeds the timeout set using jasmine.DEFAULT_TIMEOUT_INTERVAL +⚪ does not exceed the timeout using jasmine.DEFAULT_TIMEOUT_INTERVAL +⚪ can read and write jasmine.DEFAULT_TIMEOUT_INTERVAL +``` +### ✅ e2e/__tests__/timerResetMocks.test.ts +``` +✅ run timers after resetAllMocks test +✅ run timers with resetMocks in config test +``` +### ✅ e2e/__tests__/timerUseRealTimers.test.ts +``` +✅ useRealTimers cancels "timers": "fake" for whole test file +``` +### ✅ e2e/__tests__/toMatchInlineSnapshot.test.ts +``` +✅ basic support +✅ do not indent empty lines +✅ handles property matchers +✅ removes obsolete external snapshots +✅ supports async matchers +✅ supports async tests +✅ writes snapshots with non-literals in expect(...) +✅ handles mocking native modules prettier relies on +✅ supports custom matchers +✅ supports custom matchers with property matcher +✅ multiple custom matchers and native matchers +✅ indentation is correct in the presences of existing snapshots +``` +### ✅ e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts +``` +✅ works with a single snapshot +✅ works when a different assertion is failing +✅ works when multiple tests have snapshots but only one of them failed multiple times +``` +### ✅ e2e/__tests__/toMatchSnapshot.test.ts +``` +✅ basic support +✅ error thrown before snapshot +✅ first snapshot fails, second passes +✅ does not mark snapshots as obsolete in skipped tests +✅ accepts custom snapshot name +✅ handles property matchers +✅ handles invalid property matchers +✅ handles property matchers with hint +✅ handles property matchers with deep properties +``` +### ✅ e2e/__tests__/toMatchSnapshotWithRetries.test.ts +``` +✅ works with a single snapshot +✅ works when multiple tests have snapshots but only one of them failed multiple times +``` +### ✅ e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts +``` +✅ empty external +✅ empty internal ci false +✅ undefined internal ci true +``` +### ✅ e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts +``` +✅ works fine when function throws error +✅ updates existing snapshot +✅ cannot be used with .not +✅ should support rejecting promises +``` +### ✅ e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts +``` +✅ works fine when function throws error +✅ throws the error if tested function didn't throw error +✅ accepts custom snapshot name +✅ cannot be used with .not +✅ should support rejecting promises +``` +### ✅ e2e/__tests__/transform.test.ts +``` +babel-jest + ✅ runs transpiled code + ✅ instruments only specific files and collects coverage +babel-jest ignored + ✅ tells user to match ignored files +babel-jest with manual transformer + ✅ runs transpiled code +no babel-jest + ✅ fails with syntax error on flow types + ✅ instrumentation with no babel-jest +custom transformer + ✅ proprocesses files + ✅ instruments files +multiple-transformers + ✅ transforms dependencies using specific transformers +ecmascript-modules-support + ✅ runs transpiled code +transformer-config + ✅ runs transpiled code + ✅ instruments only specific files and collects coverage +transformer caching + ✅ does not rerun transform within worker +transform-environment + ✅ should transform the environment +transform-runner + ✅ should transform runner +transform-testrunner + ✅ should transform testRunner +``` +### ✅ e2e/__tests__/transformLinkedModules.test.ts +``` +✅ should transform linked modules +``` +### ✅ e2e/__tests__/typescriptCoverage.test.ts +``` +✅ instruments and collects coverage for typescript files +``` +### ✅ e2e/__tests__/unexpectedToken.test.ts +``` +✅ triggers unexpected token error message for non-JS assets +✅ triggers unexpected token error message for untranspiled node_modules +✅ does not trigger unexpected token error message for regular syntax errors +``` +### ✅ e2e/__tests__/useStderr.test.ts +``` +✅ no tests found message is redirected to stderr +``` +### ✅ e2e/__tests__/v8Coverage.test.ts +``` +✅ prints coverage with missing sourcemaps +✅ prints coverage with empty sourcemaps +``` +### ✅ e2e/__tests__/verbose.test.ts +``` +✅ Verbose Reporter +``` +### ✅ e2e/__tests__/version.test.ts +``` +✅ works with jest.config.js +``` +### ✅ e2e/__tests__/watchModeNoAccess.test.ts +``` +✅ does not re-run tests when only access time is modified +``` +### ✅ e2e/__tests__/watchModeOnlyFailed.test.ts +``` +✅ can press "f" to run only failed tests +``` +### ✅ e2e/__tests__/watchModePatterns.test.ts +``` +✅ can press "p" to filter by file name +✅ can press "t" to filter by test name +``` +### ✅ e2e/__tests__/watchModeUpdateSnapshot.test.ts +``` +✅ can press "u" to update snapshots +``` +### ✅ e2e/__tests__/workerForceExit.test.ts +``` +✅ prints a warning if a worker is force exited +✅ force exits a worker that fails to exit gracefully +``` +### ✅ e2e/__tests__/wrongEnv.test.ts +``` +Wrong globals for environment + ✅ print useful error for window + ✅ print useful error for document + ✅ print useful error for navigator + ✅ print useful error for unref + ✅ print useful error when it explodes during evaluation +``` +### ✅ e2e/custom-test-sequencer/a.test.js +``` +✅ a +``` +### ✅ e2e/custom-test-sequencer/b.test.js +``` +✅ b +``` +### ✅ e2e/custom-test-sequencer/c.test.js +``` +✅ c +``` +### ✅ e2e/custom-test-sequencer/d.test.js +``` +✅ d +``` +### ✅ e2e/custom-test-sequencer/e.test.js +``` +✅ e +``` +### ✅ e2e/test-in-root/spec.js +``` +✅ stub +``` +### ✅ e2e/test-in-root/test.js +``` +✅ stub +``` +### ✅ e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js +``` +timers + ✅ should work before calling resetAllMocks + ✅ should not break after calling resetAllMocks +``` +### ✅ e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js +``` +timers + ✅ should work before calling resetAllMocks +``` +### ✅ e2e/v8-coverage/empty-sourcemap/test.ts +``` +✅ dummy-test +``` +### ✅ examples/angular/app.component.spec.ts +``` +AppComponent + ✅ should create the app + ✅ should have as title 'angular' + ✅ should render title in a h1 tag +``` +### ✅ examples/angular/shared/data.service.spec.ts +``` +Service: DataService + ✅ should create service + ✅ should return the right title +``` +### ✅ examples/angular/shared/sub.service.spec.ts +``` +Service: SubService + ✅ should create service +``` +### ✅ examples/async/__tests__/user.test.js +``` +✅ works with resolves +✅ works with promises +✅ works with async/await +✅ works with async/await and resolves +✅ tests error with rejects +✅ tests error with promises +✅ tests error with async/await +✅ tests error with async/await and rejects +``` +### ✅ examples/automatic-mocks/__tests__/automock.test.js +``` +✅ if utils are mocked +✅ mocked implementation +``` +### ✅ examples/automatic-mocks/__tests__/createMockFromModule.test.js +``` +✅ implementation created by automock +✅ implementation created by jest.createMockFromModule +``` +### ✅ examples/automatic-mocks/__tests__/disableAutomocking.test.js +``` +✅ original implementation +``` +### ✅ examples/enzyme/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/getting-started/sum.test.js +``` +✅ adds 1 + 2 to equal 3 +``` +### ✅ examples/jquery/__tests__/display_user.test.js +``` +✅ displays a user after a click +``` +### ✅ examples/jquery/__tests__/fetch_current_user.test.js +``` +✅ calls into $.ajax with the correct params +✅ calls the callback when $.ajax requests are finished +``` +### ✅ examples/manual-mocks/__tests__/file_summarizer.test.js +``` +listFilesInDirectorySync + ✅ includes all files in the directory in the summary +``` +### ✅ examples/manual-mocks/__tests__/lodashMocking.test.js +``` +✅ if lodash head is mocked +``` +### ✅ examples/manual-mocks/__tests__/user.test.js +``` +✅ if orginal user model +``` +### ✅ examples/manual-mocks/__tests__/userMocked.test.js +``` +✅ if user model is mocked +``` +### ✅ examples/module-mock/__tests__/full_mock.js +``` +✅ does a full mock +``` +### ✅ examples/module-mock/__tests__/mock_per_test.js +``` +define mock per test + ✅ uses mocked module + ✅ uses actual module +``` +### ✅ examples/module-mock/__tests__/partial_mock.js +``` +✅ does a partial mock +``` +### ✅ examples/mongodb/__test__/db.test.js +``` +✅ should aggregate docs from collection +``` +### ✅ examples/react-native/__tests__/intro.test.js +``` +✅ renders correctly +✅ renders the ActivityIndicator component +✅ renders the TextInput component +✅ renders the FlatList component +``` +### ✅ examples/react-testing-library/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/react/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/snapshot/__tests__/clock.react.test.js +``` +✅ renders correctly +``` +### ✅ examples/snapshot/__tests__/link.react.test.js +``` +✅ renders correctly +✅ renders as an anchor when no page is set +✅ properly escapes quotes +✅ changes the class when hovered +``` +### ✅ examples/timer/__tests__/infinite_timer_game.test.js +``` +✅ schedules a 10-second timer after 1 second +``` +### ✅ examples/timer/__tests__/timer_game.test.js +``` +timerGame + ✅ waits 1 second before ending the game + ✅ calls the callback after 1 second via runAllTimers + ✅ calls the callback after 1 second via advanceTimersByTime +``` +### ✅ examples/typescript/__tests__/calc.test.ts +``` +calc - mocks + ✅ returns result from subtract + ✅ returns result from sum + ✅ adds last result to memory + ✅ subtracts last result to memory + ✅ clears the memory + ✅ throws an error when invalid Op is passed +``` +### ✅ examples/typescript/__tests__/CheckboxWithLabel-test.tsx +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/typescript/__tests__/sub-test.ts +``` +✅ subtracts 5 - 1 to equal 4 in TypeScript +``` +### ✅ examples/typescript/__tests__/sum-test.ts +``` +✅ adds 1 + 2 to equal 3 in TScript +✅ adds 1 + 2 to equal 3 in JavaScript +``` +### ✅ examples/typescript/__tests__/sum.test.js +``` +✅ adds 1 + 2 to equal 3 in Typescript +✅ adds 1 + 2 to equal 3 in JavaScript +``` +### ✅ packages/babel-jest/src/__tests__/index.ts +``` +✅ Returns source string with inline maps when no transformOptions is passed +✅ can pass null to createTransformer +caller option correctly merges from defaults and options + ✅ {"supportsDynamicImport":true,"supportsStaticESM":true} -> {"supportsDynamicImport":true,"supportsStaticESM":true} + ✅ {"supportsDynamicImport":false,"supportsStaticESM":false} -> {"supportsDynamicImport":false,"supportsStaticESM":false} + ✅ {"supportsStaticESM":false} -> {"supportsDynamicImport":false,"supportsStaticESM":false} + ✅ {"supportsDynamicImport":true} -> {"supportsDynamicImport":true,"supportsStaticESM":false} +``` +### ✅ packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts +``` +babel-plugin-jest-hoist + ✅ automatic react runtime + ✅ top level mocking + ✅ within a block + ✅ within a block with no siblings +``` +### ✅ packages/diff-sequences/src/__tests__/index.property.test.ts +``` +✅ should be reflexive +✅ should find the same number of common items when switching the inputs +✅ should have at most the length of its inputs +✅ should have at most the same number of each character as its inputs +✅ should be a subsequence of its inputs +✅ should be no-op when passing common items +✅ should find the exact common items when one array is subarray of the other +``` +### ✅ packages/diff-sequences/src/__tests__/index.test.ts +``` +invalid arg length + ✅ is not a number + ✅ Infinity is not a safe integer + ✅ Not a Number is not a safe integer + ✅ MAX_SAFE_INTEGER + 1 is not a safe integer + ✅ MIN_SAFE_INTEGER - 1 is not a safe integer + ✅ is a negative integer +invalid arg callback + ✅ null is not a function + ✅ undefined is not a function +input callback encapsulates comparison zero and negative zero + ✅ are not common according to Object.is method + ✅ are common according to === operator +input callback encapsulates comparison Not a Number + ✅ is common according to Object.is method + ✅ is not common according to === operator +input callback encapsulates sequences + ✅ arrays of strings + ✅ string and array of strings + ✅ strings +no common items negative zero is equivalent to zero for length + ✅ of a + ✅ of b + ✅ of a and b +no common items + ✅ a empty and b empty + ✅ a empty and b non-empty + ✅ a non-empty and b empty +no common items a non-empty and b non-empty + ✅ baDeltaLength 0 even + ✅ baDeltaLength 1 odd + ✅ baDeltaLength 2 even + ✅ baDeltaLength 7 odd +only common items + ✅ length 1 + ✅ length 2 +all common items outside + ✅ preceding changes + ✅ following change + ✅ preceding and following changes in one sequence +some common items inside and outside + ✅ preceding changes adjacent to common in both sequences + ✅ following changes adjacent to common in both sequences +all common items inside non-recursive + ✅ move from start to end relative to change + ✅ move from start to end relative to common + ✅ move from start to end relative to change and common + ✅ reverse relative to change + ✅ preceding middle + ✅ following middle +all common items inside recursive + ✅ prev reverse at depth 1 and preceding at depth 2 + ✅ last forward at depth 1 and following at depth 2 + ✅ preceding at depth 2 and both at depth 3 of following + ✅ interleaved single change + ✅ interleaved double changes + ✅ optimization decreases iMaxF + ✅ optimization decreases iMaxR +common substrings + ✅ progress + ✅ regression + ✅ wrapping +``` +### ✅ packages/expect/src/__tests__/assertionCounts.test.ts +``` +.assertions() + ✅ does not throw + ✅ redeclares different assertion count + ✅ expects no assertions +.hasAssertions() + ✅ does not throw if there is an assertion + ✅ throws if expected is not undefined + ✅ hasAssertions not leaking to global state +``` +### ✅ packages/expect/src/__tests__/asymmetricMatchers.test.ts +``` +✅ Any.asymmetricMatch() +✅ Any.toAsymmetricMatcher() +✅ Any.toAsymmetricMatcher() with function name +✅ Any throws when called with empty constructor +✅ Anything matches any type +✅ Anything does not match null and undefined +✅ Anything.toAsymmetricMatcher() +✅ ArrayContaining matches +✅ ArrayContaining does not match +✅ ArrayContaining throws for non-arrays +✅ ArrayNotContaining matches +✅ ArrayNotContaining does not match +✅ ArrayNotContaining throws for non-arrays +✅ ObjectContaining matches +✅ ObjectContaining does not match +✅ ObjectContaining matches defined properties +✅ ObjectContaining matches prototype properties +✅ ObjectContaining throws for non-objects +✅ ObjectContaining does not mutate the sample +✅ ObjectNotContaining matches +✅ ObjectNotContaining does not match +✅ ObjectNotContaining inverts ObjectContaining +✅ ObjectNotContaining throws for non-objects +✅ StringContaining matches string against string +✅ StringContaining throws if expected value is not string +✅ StringContaining returns false if received value is not string +✅ StringNotContaining matches string against string +✅ StringNotContaining throws if expected value is not string +✅ StringNotContaining returns true if received value is not string +✅ StringMatching matches string against regexp +✅ StringMatching matches string against string +✅ StringMatching throws if expected value is neither string nor regexp +✅ StringMatching returns false if received value is not string +✅ StringMatching returns false even if coerced non-string received value matches pattern +✅ StringNotMatching matches string against regexp +✅ StringNotMatching matches string against string +✅ StringNotMatching throws if expected value is neither string nor regexp +✅ StringNotMatching returns true if received value is not string +``` +### ✅ packages/expect/src/__tests__/extend.test.ts +``` +✅ is available globally when matcher is unary +✅ is available globally when matcher is variadic +✅ exposes matcherUtils in context +✅ is ok if there is no message specified +✅ exposes an equality function to custom matchers +✅ defines asymmetric unary matchers +✅ defines asymmetric unary matchers that can be prefixed by not +✅ defines asymmetric variadic matchers +✅ defines asymmetric variadic matchers that can be prefixed by not +✅ prints the Symbol into the error message +``` +### ✅ packages/expect/src/__tests__/isError.test.ts +``` +isError + ✅ should not assume objects are errors + ✅ should detect simple error instances + ✅ should detect errors from another context + ✅ should detect DOMException errors from another context +``` +### ✅ packages/expect/src/__tests__/matchers-toContain.property.test.ts +``` +toContain + ✅ should always find the value when inside the array + ✅ should not find the value if it has been cloned into the array +``` +### ✅ packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts +``` +toContainEqual + ✅ should always find the value when inside the array + ✅ should always find the value when cloned inside the array +``` +### ✅ packages/expect/src/__tests__/matchers-toEqual.property.test.ts +``` +toEqual + ✅ should be reflexive + ✅ should be symmetric +``` +### ✅ packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts +``` +toStrictEqual + ✅ should be reflexive + ✅ should be symmetric +toStrictEqual on node >=9 + ✅ should be equivalent to Node deepStrictEqual +``` +### ✅ packages/expect/src/__tests__/matchers.test.js +``` +✅ should throw if passed two arguments +.rejects + ✅ should reject + ✅ should reject with toThrow + ✅ should reject async function to toThrow + ✅ fails non-promise value "a" synchronously + ✅ fails non-promise value "a" + ✅ fails non-promise value [1] synchronously + ✅ fails non-promise value [1] + ✅ fails non-promise value [Function anonymous] synchronously + ✅ fails non-promise value [Function anonymous] + ✅ fails non-promise value {"a": 1} synchronously + ✅ fails non-promise value {"a": 1} + ✅ fails non-promise value 4 synchronously + ✅ fails non-promise value 4 + ✅ fails non-promise value null synchronously + ✅ fails non-promise value null + ✅ fails non-promise value true synchronously + ✅ fails non-promise value true + ✅ fails non-promise value undefined synchronously + ✅ fails non-promise value undefined + ✅ fails for promise that resolves +.resolves + ✅ should resolve + ✅ fails non-promise value "a" synchronously + ✅ fails non-promise value "a" + ✅ fails non-promise value [1] synchronously + ✅ fails non-promise value [1] + ✅ fails non-promise value [Function anonymous] synchronously + ✅ fails non-promise value [Function anonymous] + ✅ fails non-promise value {"a": 1} synchronously + ✅ fails non-promise value {"a": 1} + ✅ fails non-promise value 4 synchronously + ✅ fails non-promise value 4 + ✅ fails non-promise value null synchronously + ✅ fails non-promise value null + ✅ fails non-promise value true synchronously + ✅ fails non-promise value true + ✅ fails non-promise value undefined synchronously + ✅ fails non-promise value undefined + ✅ fails for promise that rejects +.toBe() + ✅ does not throw + ✅ fails for: 1 and 2 + ✅ fails for: true and false + ✅ fails for: [Function anonymous] and [Function anonymous] + ✅ fails for: {} and {} + ✅ fails for: {"a": 1} and {"a": 1} + ✅ fails for: {"a": 1} and {"a": 5} + ✅ fails for: {"a": [Function a], "b": 2} and {"a": Any, "b": 2} + ✅ fails for: {"a": undefined, "b": 2} and {"b": 2} + ✅ fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z + ✅ fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z + ✅ fails for: /received/ and /expected/ + ✅ fails for: Symbol(received) and Symbol(expected) + ✅ fails for: [Error: received] and [Error: expected] + ✅ fails for: "abc" and "cde" + ✅ fails for: "painless JavaScript testing" and "delightful JavaScript testing" + ✅ fails for: "" and "compare one-line string to empty string" + ✅ fails for: "with +trailing space" and "without trailing space" + ✅ fails for: "four +4 +line +string" and "3 +line +string" + ✅ fails for: [] and [] + ✅ fails for: null and undefined + ✅ fails for: -0 and 0 + ✅ fails for: 1n and 2n + ✅ fails for: {"a": 1n} and {"a": 1n} + ✅ fails for 'false' with '.not' + ✅ fails for '1' with '.not' + ✅ fails for '"a"' with '.not' + ✅ fails for 'undefined' with '.not' + ✅ fails for 'null' with '.not' + ✅ fails for '{}' with '.not' + ✅ fails for '[]' with '.not' + ✅ fails for '1n' with '.not' + ✅ fails for '1n' with '.not' + ✅ does not crash on circular references + ✅ assertion error matcherResult property contains matcher name, expected and actual values +.toStrictEqual() + ✅ does not ignore keys with undefined values + ✅ does not ignore keys with undefined values inside an array + ✅ does not ignore keys with undefined values deep inside an object + ✅ passes when comparing same type + ✅ matches the expected snapshot when it fails + ✅ displays substring diff + ✅ displays substring diff for multiple lines + ✅ does not pass for different types + ✅ does not simply compare constructor names + ✅ passes for matching sparse arrays + ✅ does not pass when sparseness of arrays do not match + ✅ does not pass when equally sparse arrays have different values +.toEqual() + ✅ {pass: false} expect(true).toEqual(false) + ✅ {pass: false} expect(1).toEqual(2) + ✅ {pass: false} expect(0).toEqual(-0) + ✅ {pass: false} expect(0).toEqual(5e-324) + ✅ {pass: false} expect(5e-324).toEqual(0) + ✅ {pass: false} expect(0).toEqual({}) + ✅ {pass: false} expect({}).toEqual(0) + ✅ {pass: false} expect({}).toEqual({}) + ✅ {pass: false} expect("abc").toEqual({"0": "a", "1": "b", "2": "c"}) + ✅ {pass: false} expect({"0": "a", "1": "b", "2": "c"}).toEqual("abc") + ✅ {pass: false} expect(/abc/gsy).toEqual(/abc/g) + ✅ {pass: false} expect({"a": 1}).toEqual({"a": 2}) + ✅ {pass: false} expect({"a": 5}).toEqual({"b": 6}) + ✅ {pass: false} expect({"foo": {"bar": 1}}).toEqual({"foo": {}}) + ✅ {pass: false} expect({"getterAndSetter": {}}).toEqual({"getterAndSetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenGetterAndSetter": {}}).toEqual({"frozenGetterAndSetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"getter": {}}).toEqual({"getter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenGetter": {}}).toEqual({"frozenGetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"setter": undefined}).toEqual({"setter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenSetter": undefined}).toEqual({"frozenSetter": {"foo": "bar"}}) + ✅ {pass: false} expect("banana").toEqual("apple") + ✅ {pass: false} expect("1 234,57 $").toEqual("1 234,57 $") + ✅ {pass: false} expect("type TypeName = T extends Function ? \"function\" : \"object\";").toEqual("type TypeName = T extends Function +? \"function\" +: \"object\";") + ✅ {pass: false} expect(null).toEqual(undefined) + ✅ {pass: false} expect([1]).toEqual([2]) + ✅ {pass: false} expect([1, 2]).toEqual([2, 1]) + ✅ {pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2]) + ✅ {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1]) + ✅ {pass: false} expect(Map {}).toEqual(Set {}) + ✅ {pass: false} expect(Set {1, 2}).toEqual(Set {}) + ✅ {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3}) + ✅ {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]}) + ✅ {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]}) + ✅ {pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}}) + ✅ {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set []) + ✅ {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3]) + ✅ {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1]) + ✅ {pass: false} expect(Map {1 => "one", 2 => "two"}).toEqual(Map {1 => "one"}) + ✅ {pass: false} expect(Map {"a" => 0}).toEqual(Map {"b" => 0}) + ✅ {pass: false} expect(Map {"v" => 1}).toEqual(Map {"v" => 2}) + ✅ {pass: false} expect(Map {["v"] => 1}).toEqual(Map {["v"] => 2}) + ✅ {pass: false} expect(Map {[1] => Map {[1] => "one"}}).toEqual(Map {[1] => Map {[1] => "two"}}) + ✅ {pass: false} expect(Immutable.Map {"a": 0}).toEqual(Immutable.Map {"b": 0}) + ✅ {pass: false} expect(Immutable.Map {"v": 1}).toEqual(Immutable.Map {"v": 2}) + ✅ {pass: false} expect(Immutable.OrderedMap {1: "one", 2: "two"}).toEqual(Immutable.OrderedMap {2: "two", 1: "one"}) + ✅ {pass: false} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 11}}}) + ✅ {pass: false} expect([97, 98, 99]).toEqual([97, 98, 100]) + ✅ {pass: false} expect({"a": 1, "b": 2}).toEqual(ObjectContaining {"a": 2}) + ✅ {pass: false} expect(false).toEqual(ObjectContaining {"a": 2}) + ✅ {pass: false} expect([1, 3]).toEqual(ArrayContaining [1, 2]) + ✅ {pass: false} expect(1).toEqual(ArrayContaining [1, 2]) + ✅ {pass: false} expect("abd").toEqual(StringContaining "bc") + ✅ {pass: false} expect("abd").toEqual(StringMatching /bc/i) + ✅ {pass: false} expect(undefined).toEqual(Anything) + ✅ {pass: false} expect(undefined).toEqual(Any) + ✅ {pass: false} expect("Eve").toEqual({"asymmetricMatch": [Function asymmetricMatch]}) + ✅ {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) + ✅ {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) + ✅ {pass: false} expect({Symbol(foo): 1, Symbol(bar): 2}).toEqual({Symbol(foo): Any, Symbol(bar): 1}) + ✅ {pass: false} expect(1n).toEqual(2n) + ✅ {pass: false} expect(1n).toEqual(1) + ✅ {pass: true} expect(true).not.toEqual(true) + ✅ {pass: true} expect(1).not.toEqual(1) + ✅ {pass: true} expect(NaN).not.toEqual(NaN) + ✅ {pass: true} expect(0).not.toEqual(0) + ✅ {pass: true} expect(0).not.toEqual(0) + ✅ {pass: true} expect({}).not.toEqual({}) + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect([1]).not.toEqual([1]) + ✅ {pass: true} expect([1, 2]).not.toEqual([1, 2]) + ✅ {pass: true} expect(Immutable.List [1]).not.toEqual(Immutable.List [1]) + ✅ {pass: true} expect(Immutable.List [1, 2]).not.toEqual(Immutable.List [1, 2]) + ✅ {pass: true} expect({}).not.toEqual({}) + ✅ {pass: true} expect({"a": 99}).not.toEqual({"a": 99}) + ✅ {pass: true} expect(Set {}).not.toEqual(Set {}) + ✅ {pass: true} expect(Set {1, 2}).not.toEqual(Set {1, 2}) + ✅ {pass: true} expect(Set {1, 2}).not.toEqual(Set {2, 1}) + ✅ {pass: true} expect(Set {[1], [2]}).not.toEqual(Set {[2], [1]}) + ✅ {pass: true} expect(Set {Set {[1]}, Set {[2]}}).not.toEqual(Set {Set {[2]}, Set {[1]}}) + ✅ {pass: true} expect(Set {[1], [2], [3], [3]}).not.toEqual(Set {[3], [3], [2], [1]}) + ✅ {pass: true} expect(Set {{"a": 1}, {"b": 2}}).not.toEqual(Set {{"b": 2}, {"a": 1}}) + ✅ {pass: true} expect(Immutable.Set []).not.toEqual(Immutable.Set []) + ✅ {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [1, 2]) + ✅ {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [2, 1]) + ✅ {pass: true} expect(Immutable.OrderedSet []).not.toEqual(Immutable.OrderedSet []) + ✅ {pass: true} expect(Immutable.OrderedSet [1, 2]).not.toEqual(Immutable.OrderedSet [1, 2]) + ✅ {pass: true} expect(Map {}).not.toEqual(Map {}) + ✅ {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {1 => "one", 2 => "two"}) + ✅ {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {2 => "two", 1 => "one"}) + ✅ {pass: true} expect(Map {[1] => "one", [2] => "two", [3] => "three", [3] => "four"}).not.toEqual(Map {[3] => "three", [3] => "four", [2] => "two", [1] => "one"}) + ✅ {pass: true} expect(Map {[1] => Map {[1] => "one"}, [2] => Map {[2] => "two"}}).not.toEqual(Map {[2] => Map {[2] => "two"}, [1] => Map {[1] => "one"}}) + ✅ {pass: true} expect(Map {[1] => "one", [2] => "two"}).not.toEqual(Map {[2] => "two", [1] => "one"}) + ✅ {pass: true} expect(Map {{"a": 1} => "one", {"b": 2} => "two"}).not.toEqual(Map {{"b": 2} => "two", {"a": 1} => "one"}) + ✅ {pass: true} expect(Map {1 => ["one"], 2 => ["two"]}).not.toEqual(Map {2 => ["two"], 1 => ["one"]}) + ✅ {pass: true} expect(Immutable.Map {}).not.toEqual(Immutable.Map {}) + ✅ {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {1: "one", 2: "two"}) + ✅ {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {2: "two", 1: "one"}) + ✅ {pass: true} expect(Immutable.OrderedMap {1: "one", 2: "two"}).not.toEqual(Immutable.OrderedMap {1: "one", 2: "two"}) + ✅ {pass: true} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).not.toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}) + ✅ {pass: true} expect([97, 98, 99]).not.toEqual([97, 98, 99]) + ✅ {pass: true} expect({"a": 1, "b": 2}).not.toEqual(ObjectContaining {"a": 1}) + ✅ {pass: true} expect([1, 2, 3]).not.toEqual(ArrayContaining [2, 3]) + ✅ {pass: true} expect("abcd").not.toEqual(StringContaining "bc") + ✅ {pass: true} expect("abcd").not.toEqual(StringMatching /bc/) + ✅ {pass: true} expect(true).not.toEqual(Anything) + ✅ {pass: true} expect([Function anonymous]).not.toEqual(Any) + ✅ {pass: true} expect({"a": 1, "b": [Function b], "c": true}).not.toEqual({"a": 1, "b": Any, "c": Anything}) + ✅ {pass: true} expect("Alice").not.toEqual({"asymmetricMatch": [Function asymmetricMatch]}) + ✅ {pass: true} expect({"nodeName": "div", "nodeType": 1}).not.toEqual({"nodeName": "div", "nodeType": 1}) + ✅ {pass: true} expect({Symbol(foo): 1, Symbol(bar): 2}).not.toEqual({Symbol(foo): Any, Symbol(bar): 2}) + ✅ {pass: true} expect(1n).not.toEqual(1n) + ✅ {pass: true} expect(0n).not.toEqual(0n) + ✅ {pass: true} expect([1n]).not.toEqual([1n]) + ✅ {pass: true} expect([1n, 2]).not.toEqual([1n, 2]) + ✅ {pass: true} expect(Immutable.List [1n]).not.toEqual(Immutable.List [1n]) + ✅ {pass: true} expect({"a": 99n}).not.toEqual({"a": 99n}) + ✅ {pass: true} expect(Set {1n, 2n}).not.toEqual(Set {1n, 2n}) + ✅ assertion error matcherResult property contains matcher name, expected and actual values + ✅ symbol based keys in arrays are processed correctly + ✅ non-enumerable members should be skipped during equal + ✅ non-enumerable symbolic members should be skipped during equal +.toEqual() cyclic object equality + ✅ properties with the same circularity are equal + ✅ properties with different circularity are not equal + ✅ are not equal if circularity is not on the same property +.toBeInstanceOf() + ✅ passing Map {} and [Function Map] + ✅ passing [] and [Function Array] + ✅ passing {} and [Function A] + ✅ passing {} and [Function B] + ✅ passing {} and [Function B] + ✅ passing {} and [Function anonymous] + ✅ passing {} and [Function B] + ✅ passing {} and [Function name() {}] + ✅ failing "a" and [Function String] + ✅ failing 1 and [Function Number] + ✅ failing true and [Function Boolean] + ✅ failing {} and [Function B] + ✅ failing {} and [Function A] + ✅ failing undefined and [Function String] + ✅ failing null and [Function String] + ✅ failing /\w+/ and [Function anonymous] + ✅ failing {} and [Function RegExp] + ✅ throws if constructor is not a function +.toBeTruthy(), .toBeFalsy() + ✅ does not accept arguments + ✅ '{}' is truthy + ✅ '[]' is truthy + ✅ 'true' is truthy + ✅ '1' is truthy + ✅ '"a"' is truthy + ✅ '0.5' is truthy + ✅ 'Map {}' is truthy + ✅ '[Function anonymous]' is truthy + ✅ 'Infinity' is truthy + ✅ '1n' is truthy + ✅ 'false' is falsy + ✅ 'null' is falsy + ✅ 'NaN' is falsy + ✅ '0' is falsy + ✅ '""' is falsy + ✅ 'undefined' is falsy + ✅ '0n' is falsy +.toBeNaN() + ✅ {pass: true} expect(NaN).toBeNaN() + ✅ throws +.toBeNull() + ✅ fails for '{}' + ✅ fails for '[]' + ✅ fails for 'true' + ✅ fails for '1' + ✅ fails for '"a"' + ✅ fails for '0.5' + ✅ fails for 'Map {}' + ✅ fails for '[Function anonymous]' + ✅ fails for 'Infinity' + ✅ fails for null with .not + ✅ pass for null +.toBeDefined(), .toBeUndefined() + ✅ '{}' is defined + ✅ '[]' is defined + ✅ 'true' is defined + ✅ '1' is defined + ✅ '"a"' is defined + ✅ '0.5' is defined + ✅ 'Map {}' is defined + ✅ '[Function anonymous]' is defined + ✅ 'Infinity' is defined + ✅ '1n' is defined + ✅ undefined is undefined +.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() + ✅ {pass: true} expect(1).toBeLessThan(2) + ✅ {pass: false} expect(2).toBeLessThan(1) + ✅ {pass: true} expect(2).toBeGreaterThan(1) + ✅ {pass: false} expect(1).toBeGreaterThan(2) + ✅ {pass: true} expect(1).toBeLessThanOrEqual(2) + ✅ {pass: false} expect(2).toBeLessThanOrEqual(1) + ✅ {pass: true} expect(2).toBeGreaterThanOrEqual(1) + ✅ {pass: false} expect(1).toBeGreaterThanOrEqual(2) + ✅ throws: [1, 2] + ✅ {pass: true} expect(-Infinity).toBeLessThan(Infinity) + ✅ {pass: false} expect(Infinity).toBeLessThan(-Infinity) + ✅ {pass: true} expect(Infinity).toBeGreaterThan(-Infinity) + ✅ {pass: false} expect(-Infinity).toBeGreaterThan(Infinity) + ✅ {pass: true} expect(-Infinity).toBeLessThanOrEqual(Infinity) + ✅ {pass: false} expect(Infinity).toBeLessThanOrEqual(-Infinity) + ✅ {pass: true} expect(Infinity).toBeGreaterThanOrEqual(-Infinity) + ✅ {pass: false} expect(-Infinity).toBeGreaterThanOrEqual(Infinity) + ✅ throws: [-Infinity, Infinity] + ✅ {pass: true} expect(5e-324).toBeLessThan(1.7976931348623157e+308) + ✅ {pass: false} expect(1.7976931348623157e+308).toBeLessThan(5e-324) + ✅ {pass: true} expect(1.7976931348623157e+308).toBeGreaterThan(5e-324) + ✅ {pass: false} expect(5e-324).toBeGreaterThan(1.7976931348623157e+308) + ✅ {pass: true} expect(5e-324).toBeLessThanOrEqual(1.7976931348623157e+308) + ✅ {pass: false} expect(1.7976931348623157e+308).toBeLessThanOrEqual(5e-324) + ✅ {pass: true} expect(1.7976931348623157e+308).toBeGreaterThanOrEqual(5e-324) + ✅ {pass: false} expect(5e-324).toBeGreaterThanOrEqual(1.7976931348623157e+308) + ✅ throws: [5e-324, 1.7976931348623157e+308] + ✅ {pass: true} expect(17).toBeLessThan(34) + ✅ {pass: false} expect(34).toBeLessThan(17) + ✅ {pass: true} expect(34).toBeGreaterThan(17) + ✅ {pass: false} expect(17).toBeGreaterThan(34) + ✅ {pass: true} expect(17).toBeLessThanOrEqual(34) + ✅ {pass: false} expect(34).toBeLessThanOrEqual(17) + ✅ {pass: true} expect(34).toBeGreaterThanOrEqual(17) + ✅ {pass: false} expect(17).toBeGreaterThanOrEqual(34) + ✅ throws: [17, 34] + ✅ {pass: true} expect(3).toBeLessThan(7) + ✅ {pass: false} expect(7).toBeLessThan(3) + ✅ {pass: true} expect(7).toBeGreaterThan(3) + ✅ {pass: false} expect(3).toBeGreaterThan(7) + ✅ {pass: true} expect(3).toBeLessThanOrEqual(7) + ✅ {pass: false} expect(7).toBeLessThanOrEqual(3) + ✅ {pass: true} expect(7).toBeGreaterThanOrEqual(3) + ✅ {pass: false} expect(3).toBeGreaterThanOrEqual(7) + ✅ throws: [3, 7] + ✅ {pass: true} expect(9).toBeLessThan(18) + ✅ {pass: false} expect(18).toBeLessThan(9) + ✅ {pass: true} expect(18).toBeGreaterThan(9) + ✅ {pass: false} expect(9).toBeGreaterThan(18) + ✅ {pass: true} expect(9).toBeLessThanOrEqual(18) + ✅ {pass: false} expect(18).toBeLessThanOrEqual(9) + ✅ {pass: true} expect(18).toBeGreaterThanOrEqual(9) + ✅ {pass: false} expect(9).toBeGreaterThanOrEqual(18) + ✅ throws: [9, 18] + ✅ {pass: true} expect(0.1).toBeLessThan(0.2) + ✅ {pass: false} expect(0.2).toBeLessThan(0.1) + ✅ {pass: true} expect(0.2).toBeGreaterThan(0.1) + ✅ {pass: false} expect(0.1).toBeGreaterThan(0.2) + ✅ {pass: true} expect(0.1).toBeLessThanOrEqual(0.2) + ✅ {pass: false} expect(0.2).toBeLessThanOrEqual(0.1) + ✅ {pass: true} expect(0.2).toBeGreaterThanOrEqual(0.1) + ✅ {pass: false} expect(0.1).toBeGreaterThanOrEqual(0.2) + ✅ throws: [0.1, 0.2] + ✅ can compare BigInt to Numbers + ✅ {pass: true} expect(1n).toBeLessThan(2n) + ✅ {pass: false} expect(2n).toBeLessThan(1n) + ✅ {pass: true} expect(2n).toBeGreaterThan(1n) + ✅ {pass: false} expect(1n).toBeGreaterThan(2n) + ✅ {pass: true} expect(1n).toBeLessThanOrEqual(2n) + ✅ {pass: false} expect(2n).toBeLessThanOrEqual(1n) + ✅ {pass: true} expect(2n).toBeGreaterThanOrEqual(1n) + ✅ {pass: false} expect(1n).toBeGreaterThanOrEqual(2n) + ✅ throws: [1n, 2n] + ✅ {pass: true} expect(17n).toBeLessThan(34n) + ✅ {pass: false} expect(34n).toBeLessThan(17n) + ✅ {pass: true} expect(34n).toBeGreaterThan(17n) + ✅ {pass: false} expect(17n).toBeGreaterThan(34n) + ✅ {pass: true} expect(17n).toBeLessThanOrEqual(34n) + ✅ {pass: false} expect(34n).toBeLessThanOrEqual(17n) + ✅ {pass: true} expect(34n).toBeGreaterThanOrEqual(17n) + ✅ {pass: false} expect(17n).toBeGreaterThanOrEqual(34n) + ✅ throws: [17n, 34n] + ✅ {pass: true} expect(-1).toBeLessThan(2n) + ✅ {pass: false} expect(2n).toBeLessThan(-1) + ✅ {pass: true} expect(2n).toBeGreaterThan(-1) + ✅ {pass: false} expect(-1).toBeGreaterThan(2n) + ✅ {pass: true} expect(-1).toBeLessThanOrEqual(2n) + ✅ {pass: false} expect(2n).toBeLessThanOrEqual(-1) + ✅ {pass: true} expect(2n).toBeGreaterThanOrEqual(-1) + ✅ {pass: false} expect(-1).toBeGreaterThanOrEqual(2n) + ✅ throws: [-1, 2n] + ✅ equal numbers: [1, 1] + ✅ equal numbers: [5e-324, 5e-324] + ✅ equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308] + ✅ equal numbers: [Infinity, Infinity] + ✅ equal numbers: [-Infinity, -Infinity] + ✅ equal numbers: [1, 1] + ✅ equal numbers: [9007199254740991, 9007199254740991] +.toContain(), .toContainEqual() + ✅ iterable + ✅ '[1, 2, 3, 4]' contains '1' + ✅ '["a", "b", "c", "d"]' contains '"a"' + ✅ '[undefined, null]' contains 'null' + ✅ '[undefined, null]' contains 'undefined' + ✅ '[Symbol(a)]' contains 'Symbol(a)' + ✅ '"abcdef"' contains '"abc"' + ✅ '"11112111"' contains '"2"' + ✅ 'Set {"abc", "def"}' contains '"abc"' + ✅ '[0, 1]' contains '1' + ✅ '[1n, 2n, 3n, 4n]' contains '1n' + ✅ '[1, 2, 3, 3n, 4]' contains '3n' + ✅ '[1, 2, 3]' does not contain '4' + ✅ '[null, undefined]' does not contain '1' + ✅ '[{}, []]' does not contain '[]' + ✅ '[{}, []]' does not contain '{}' + ✅ '[1n, 2n, 3n]' does not contain '3' + ✅ error cases + ✅ '[1, 2, 3, 4]' contains a value equal to '1' + ✅ '["a", "b", "c", "d"]' contains a value equal to '"a"' + ✅ '[undefined, null]' contains a value equal to 'null' + ✅ '[undefined, null]' contains a value equal to 'undefined' + ✅ '[Symbol(a)]' contains a value equal to 'Symbol(a)' + ✅ '[{"a": "b"}, {"a": "c"}]' contains a value equal to '{"a": "b"}' + ✅ 'Set {1, 2, 3, 4}' contains a value equal to '1' + ✅ '[0, 1]' contains a value equal to '1' + ✅ '[{"a": "b"}, {"a": "c"}]' does not contain a value equal to'{"a": "d"}' + ✅ error cases for toContainEqual +.toBeCloseTo + ✅ {pass: true} expect(0).toBeCloseTo(0) + ✅ {pass: true} expect(0).toBeCloseTo(0.001) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.229) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.226) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.225) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.234) + ✅ {pass: true} expect(Infinity).toBeCloseTo(Infinity) + ✅ {pass: true} expect(-Infinity).toBeCloseTo(-Infinity) + ✅ {pass: false} expect(0).toBeCloseTo(0.01) + ✅ {pass: false} expect(1).toBeCloseTo(1.23) + ✅ {pass: false} expect(1.23).toBeCloseTo(1.2249999) + ✅ {pass: false} expect(Infinity).toBeCloseTo(-Infinity) + ✅ {pass: false} expect(Infinity).toBeCloseTo(1.23) + ✅ {pass: false} expect(-Infinity).toBeCloseTo(-1.23) + ✅ {pass: false} expect(3.141592e-7).toBeCloseTo(3e-7, 8) + ✅ {pass: false} expect(56789).toBeCloseTo(51234, -4) + ✅ {pass: true} expect(0).toBeCloseTo(0.1, 0) + ✅ {pass: true} expect(0).toBeCloseTo(0.0001, 3) + ✅ {pass: true} expect(0).toBeCloseTo(0.000004, 5) + ✅ {pass: true} expect(2.0000002).toBeCloseTo(2, 5) +.toBeCloseTo throws: Matcher error + ✅ promise empty isNot false received + ✅ promise empty isNot true expected + ✅ promise rejects isNot false expected + ✅ promise rejects isNot true received + ✅ promise resolves isNot false received + ✅ promise resolves isNot true expected +.toMatch() + ✅ {pass: true} expect(foo).toMatch(foo) + ✅ {pass: true} expect(Foo bar).toMatch(/^foo/i) + ✅ throws: [bar, foo] + ✅ throws: [bar, /foo/] + ✅ throws if non String actual value passed: [1, "foo"] + ✅ throws if non String actual value passed: [{}, "foo"] + ✅ throws if non String actual value passed: [[], "foo"] + ✅ throws if non String actual value passed: [true, "foo"] + ✅ throws if non String actual value passed: [/foo/i, "foo"] + ✅ throws if non String actual value passed: [[Function anonymous], "foo"] + ✅ throws if non String actual value passed: [undefined, "foo"] + ✅ throws if non String/RegExp expected value passed: ["foo", 1] + ✅ throws if non String/RegExp expected value passed: ["foo", {}] + ✅ throws if non String/RegExp expected value passed: ["foo", []] + ✅ throws if non String/RegExp expected value passed: ["foo", true] + ✅ throws if non String/RegExp expected value passed: ["foo", [Function anonymous]] + ✅ throws if non String/RegExp expected value passed: ["foo", undefined] + ✅ escapes strings properly + ✅ does not maintain RegExp state between calls +.toHaveLength + ✅ {pass: true} expect([1, 2]).toHaveLength(2) + ✅ {pass: true} expect([]).toHaveLength(0) + ✅ {pass: true} expect(["a", "b"]).toHaveLength(2) + ✅ {pass: true} expect("abc").toHaveLength(3) + ✅ {pass: true} expect("").toHaveLength(0) + ✅ {pass: true} expect([Function anonymous]).toHaveLength(0) + ✅ {pass: false} expect([1, 2]).toHaveLength(3) + ✅ {pass: false} expect([]).toHaveLength(1) + ✅ {pass: false} expect(["a", "b"]).toHaveLength(99) + ✅ {pass: false} expect("abc").toHaveLength(66) + ✅ {pass: false} expect("").toHaveLength(1) + ✅ error cases +.toHaveLength matcher error expected length + ✅ not number + ✅ number Infinity + ✅ number NaN + ✅ number float + ✅ number negative integer +.toHaveProperty() + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 1) + ✅ {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', 2) + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', Any) + ✅ {pass: true} expect({"a": 0}).toHaveProperty('a', 0) + ✅ {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b', undefined) + ✅ {pass: true} expect({"a": {}}).toHaveProperty('a.b', undefined) + ✅ {pass: true} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 5}) + ✅ {pass: true} expect({"property": 1}).toHaveProperty('property', 1) + ✅ {pass: true} expect({}).toHaveProperty('a', undefined) + ✅ {pass: true} expect({}).toHaveProperty('b', "b") + ✅ {pass: true} expect({}).toHaveProperty('setter', undefined) + ✅ {pass: true} expect({"val": true}).toHaveProperty('a', undefined) + ✅ {pass: true} expect({"val": true}).toHaveProperty('c', "c") + ✅ {pass: true} expect({"val": true}).toHaveProperty('val', true) + ✅ {pass: true} expect({"nodeName": "DIV"}).toHaveProperty('nodeType', 1) + ✅ {pass: true} expect("").toHaveProperty('length', 0) + ✅ {pass: true} expect([Function memoized]).toHaveProperty('memo', []) + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.ttt.d', 1) + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"children": ["\"That cartoon\""], "props": null, "type": "p"}).toHaveProperty('children,0', "\"That cat cartoon\"") + ✅ {pass: false} expect({"children": ["Roses are red. +Violets are blue. +Testing with Jest is good for you."], "props": null, "type": "pre"}).toHaveProperty('children,0', "Roses are red, violets are blue. +Testing with Jest +Is good for you.") + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 2) + ✅ {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d', 5) + ✅ {pass: false} expect({}).toHaveProperty('a', "test") + ✅ {pass: false} expect({"a": {"b": 3}}).toHaveProperty('a.b', undefined) + ✅ {pass: false} expect(1).toHaveProperty('a.b.c', "test") + ✅ {pass: false} expect("abc").toHaveProperty('a.b.c', {"a": 5}) + ✅ {pass: false} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 4}) + ✅ {pass: false} expect({}).toHaveProperty('a', "a") + ✅ {pass: false} expect({}).toHaveProperty('b', undefined) + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d') + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d') + ✅ {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d') + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1') + ✅ {pass: true} expect({"a": 0}).toHaveProperty('a') + ✅ {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b') + ✅ {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d') + ✅ {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d') + ✅ {pass: false} expect({}).toHaveProperty('a') + ✅ {pass: false} expect(1).toHaveProperty('a.b.c') + ✅ {pass: false} expect("abc").toHaveProperty('a.b.c') + ✅ {pass: false} expect(false).toHaveProperty('key') + ✅ {pass: false} expect(0).toHaveProperty('key') + ✅ {pass: false} expect("").toHaveProperty('key') + ✅ {pass: false} expect(Symbol()).toHaveProperty('key') + ✅ {pass: false} expect({"key": 1}).toHaveProperty('not') + ✅ {error} expect(null).toHaveProperty('a.b') + ✅ {error} expect(undefined).toHaveProperty('a') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('undefined') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('null') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('1') + ✅ {error} expect({}).toHaveProperty('') +toMatchObject() circular references simple circular references + ✅ {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({}) + ✅ {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "hello", "ref": [Circular]}) + ✅ {pass: false} expect({}).toMatchObject({"a": "hello", "ref": [Circular]}) + ✅ {pass: false} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "world", "ref": [Circular]}) + ✅ {pass: false} expect({"ref": "not a ref"}).toMatchObject({"a": "hello", "ref": [Circular]}) +toMatchObject() circular references transitive circular references + ✅ {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({}) + ✅ {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({"a": "world", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({"nestedObj": {"parentObj": "not the parent ref"}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) +toMatchObject() + ✅ {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b"}) + ✅ {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b", "c": "d"}) + ✅ {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": "z"}}) + ✅ {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"x": {"r": "r"}}}) + ✅ {pass: true} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5]}) + ✅ {pass: true} expect({"a": [3, 4, 5, "v"], "b": "b"}).toMatchObject({"a": [3, 4, 5, "v"]}) + ✅ {pass: true} expect({"a": 1, "c": 2}).toMatchObject({"a": Any}) + ✅ {pass: true} expect({"a": {"x": "x", "y": "y"}}).toMatchObject({"a": {"x": Any}}) + ✅ {pass: true} expect(Set {1, 2}).toMatchObject(Set {1, 2}) + ✅ {pass: true} expect(Set {1, 2}).toMatchObject(Set {2, 1}) + ✅ {pass: true} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-11-30T00:00:00.000Z) + ✅ {pass: true} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-11-30T00:00:00.000Z}) + ✅ {pass: true} expect({"a": null, "b": "b"}).toMatchObject({"a": null}) + ✅ {pass: true} expect({"a": undefined, "b": "b"}).toMatchObject({"a": undefined}) + ✅ {pass: true} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "a"}]}) + ✅ {pass: true} expect([1, 2]).toMatchObject([1, 2]) + ✅ {pass: true} expect({"a": undefined}).toMatchObject({"a": undefined}) + ✅ {pass: true} expect([]).toMatchObject([]) + ✅ {pass: true} expect([Error: foo]).toMatchObject([Error: foo]) + ✅ {pass: true} expect([Error: bar]).toMatchObject({"message": "bar"}) + ✅ {pass: true} expect({}).toMatchObject({"a": undefined, "b": "b"}) + ✅ {pass: true} expect({"a": "b"}).toMatchObject({"a": "b"}) + ✅ {pass: true} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "b", Symbol(jest): "jest"}) + ✅ {pass: true} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "b", "c": "d", Symbol(jest): "jest"}) + ✅ {pass: true} expect({}).toMatchObject({"a": undefined, "b": "b", "c": "c"}) + ✅ {pass: true} expect({}).toMatchObject({"d": 4}) + ✅ {pass: true} expect({"a": "b", "toString": [Function toString]}).toMatchObject({"toString": Any}) + ✅ {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"e": "b"}) + ✅ {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b!", "c": "d"}) + ✅ {pass: false} expect({"a": "a", "c": "d"}).toMatchObject({"a": Any}) + ✅ {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": [3]}}) + ✅ {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"l": {"r": "r"}}}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5, 6]}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4]}) + ✅ {pass: false} expect({"a": [3, 4, "v"], "b": "b"}).toMatchObject({"a": ["v"]}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": 4}}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": Any}}) + ✅ {pass: false} expect([1, 2]).toMatchObject([1, 3]) + ✅ {pass: false} expect([0]).toMatchObject([-0]) + ✅ {pass: false} expect(Set {1, 2}).toMatchObject(Set {2}) + ✅ {pass: false} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-10-10T00:00:00.000Z) + ✅ {pass: false} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-10-10T00:00:00.000Z}) + ✅ {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": "4"}) + ✅ {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": undefined}) + ✅ {pass: false} expect({"a": undefined}).toMatchObject({"a": null}) + ✅ {pass: false} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "c"}]}) + ✅ {pass: false} expect({"a": 1, "b": 1, "c": 1, "d": {"e": {"f": 555}}}).toMatchObject({"d": {"e": {"f": 222}}}) + ✅ {pass: false} expect({}).toMatchObject({"a": undefined}) + ✅ {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1]) + ✅ {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2]) + ✅ {pass: false} expect([Error: foo]).toMatchObject([Error: bar]) + ✅ {pass: false} expect({"a": "b"}).toMatchObject({"c": "d"}) + ✅ {pass: false} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "c", Symbol(jest): Any}) + ✅ {pass: false} expect({"a": "b"}).toMatchObject({"toString": Any}) + ✅ throws expect(null).toMatchObject({}) + ✅ throws expect(4).toMatchObject({}) + ✅ throws expect("44").toMatchObject({}) + ✅ throws expect(true).toMatchObject({}) + ✅ throws expect(undefined).toMatchObject({}) + ✅ throws expect({}).toMatchObject(null) + ✅ throws expect({}).toMatchObject(4) + ✅ throws expect({}).toMatchObject("some string") + ✅ throws expect({}).toMatchObject(true) + ✅ throws expect({}).toMatchObject(undefined) + ✅ does not match properties up in the prototype chain +``` +### ✅ packages/expect/src/__tests__/spyMatchers.test.ts +``` +toBeCalled + ✅ works only on spies or jest.fn + ✅ passes when called + ✅ .not passes when called + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message +toHaveBeenCalled + ✅ works only on spies or jest.fn + ✅ passes when called + ✅ .not passes when called + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message +toBeCalledTimes + ✅ .not works only on spies or jest.fn + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function called equal to expected times + ✅ .not passes if function called more than expected times + ✅ .not passes if function called less than expected times + ✅ includes the custom mock name in the error message +toHaveBeenCalledTimes + ✅ .not works only on spies or jest.fn + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function called equal to expected times + ✅ .not passes if function called more than expected times + ✅ .not passes if function called less than expected times + ✅ includes the custom mock name in the error message +lastCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toHaveBeenLastCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +nthCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with three calls + ✅ positive throw matcher error for n that is not positive integer + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not integer + ✅ includes the custom mock name in the error message +toHaveBeenNthCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with three calls + ✅ positive throw matcher error for n that is not positive integer + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not integer + ✅ includes the custom mock name in the error message +toBeCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toHaveBeenCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toReturn + ✅ .not works only on jest.fn + ✅ throw matcher error if received is spy + ✅ passes when returned + ✅ passes when undefined is returned + ✅ passes when at least one call does not throw + ✅ .not passes when not returned + ✅ .not passes when all calls throw + ✅ .not passes when a call throws undefined + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toHaveReturned + ✅ .not works only on jest.fn + ✅ throw matcher error if received is spy + ✅ passes when returned + ✅ passes when undefined is returned + ✅ passes when at least one call does not throw + ✅ .not passes when not returned + ✅ .not passes when all calls throw + ✅ .not passes when a call throws undefined + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toReturnTimes + ✅ throw matcher error if received is spy + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function returned equal to expected times + ✅ calls that return undefined are counted as returns + ✅ .not passes if function returned more than expected times + ✅ .not passes if function called less than expected times + ✅ calls that throw are not counted + ✅ calls that throw undefined are not counted + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toHaveReturnedTimes + ✅ throw matcher error if received is spy + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function returned equal to expected times + ✅ calls that return undefined are counted as returns + ✅ .not passes if function returned more than expected times + ✅ .not passes if function called less than expected times + ✅ calls that throw are not counted + ✅ calls that throw undefined are not counted + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +lastReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +lastReturnedWith lastReturnedWith + ✅ works with three calls + ✅ incomplete recursive calls are handled properly +toHaveLastReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveLastReturnedWith lastReturnedWith + ✅ works with three calls + ✅ incomplete recursive calls are handled properly +nthReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +nthReturnedWith nthReturnedWith + ✅ works with three calls + ✅ should replace 1st, 2nd, 3rd with first, second, third + ✅ positive throw matcher error for n that is not positive integer + ✅ should reject nth value greater than number of calls + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not number + ✅ incomplete recursive calls are handled properly +toHaveNthReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveNthReturnedWith nthReturnedWith + ✅ works with three calls + ✅ should replace 1st, 2nd, 3rd with first, second, third + ✅ positive throw matcher error for n that is not positive integer + ✅ should reject nth value greater than number of calls + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not number + ✅ incomplete recursive calls are handled properly +toReturnWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toReturnWith returnedWith + ✅ works with more calls than the limit + ✅ incomplete recursive calls are handled properly +toHaveReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveReturnedWith returnedWith + ✅ works with more calls than the limit + ✅ incomplete recursive calls are handled properly +``` +### ✅ packages/expect/src/__tests__/stacktrace.test.ts +``` +✅ stack trace points to correct location when using matchers +✅ stack trace points to correct location when using nested matchers +✅ stack trace points to correct location when throwing from a custom matcher +``` +### ✅ packages/expect/src/__tests__/symbolInObjects.test.ts +``` +Symbol in objects + ✅ should compare objects with Symbol keys + ✅ should compare objects with mixed keys and Symbol + ✅ should compare objects with different Symbol keys +``` +### ✅ packages/expect/src/__tests__/toEqual-dom.test.ts +``` +toEqual duck type Text + ✅ isNot false + ✅ isNot true +toEqual duck type Element + ✅ isNot false + ✅ isNot true +toEqual duck type Fragment + ✅ isNot false + ✅ isNot true +toEqual document createTextNode + ✅ isNot false + ✅ isNot true +toEqual document createElement + ✅ isNot false + ✅ isNot true +toEqual document createDocumentFragment + ✅ isNot false + ✅ isNot true +``` +### ✅ packages/expect/src/__tests__/toThrowMatchers.test.ts +``` +toThrowError + ✅ to throw or not to throw + ✅ invalid arguments + ✅ invalid actual +toThrowError substring + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ properly escapes strings when matching against errors + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrowError regexp + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrowError error class + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match (error) + ✅ threw, but class did not match (non-error falsey) + ✅ threw, but class should not match (error) + ✅ threw, but class should not match (error subclass) + ✅ threw, but class should not match (error subsubclass) +toThrowError error-message pass + ✅ isNot false + ✅ isNot true +toThrowError error-message fail + ✅ isNot false + ✅ isNot true + ✅ multiline diff highlight incorrect expected space +toThrowError asymmetric any-Class pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric any-Class fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric anything pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric anything fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric no-symbol pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric no-symbol fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric objectContaining pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric objectContaining fail + ✅ isNot false + ✅ isNot true +toThrowError promise/async throws if Error-like object is returned + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match + ✅ threw, but should not have +toThrowError expected is undefined + ✅ threw, but should not have (non-error falsey) +toThrow + ✅ to throw or not to throw + ✅ invalid arguments + ✅ invalid actual +toThrow substring + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ properly escapes strings when matching against errors + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrow regexp + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrow error class + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match (error) + ✅ threw, but class did not match (non-error falsey) + ✅ threw, but class should not match (error) + ✅ threw, but class should not match (error subclass) + ✅ threw, but class should not match (error subsubclass) +toThrow error-message pass + ✅ isNot false + ✅ isNot true +toThrow error-message fail + ✅ isNot false + ✅ isNot true + ✅ multiline diff highlight incorrect expected space +toThrow asymmetric any-Class pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric any-Class fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric anything pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric anything fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric no-symbol pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric no-symbol fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric objectContaining pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric objectContaining fail + ✅ isNot false + ✅ isNot true +toThrow promise/async throws if Error-like object is returned + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match + ✅ threw, but should not have +toThrow expected is undefined + ✅ threw, but should not have (non-error falsey) +``` +### ✅ packages/expect/src/__tests__/utils.test.ts +``` +getPath() + ✅ property exists + ✅ property doesnt exist + ✅ property exist but undefined + ✅ property is a getter on class instance + ✅ property is inherited + ✅ path breaks + ✅ empty object at the end +getObjectSubset + ✅ expect(getObjectSubset({"a": "b", "c": "d"}, {"a": "d"})).toEqual({"a": "b"}) + ✅ expect(getObjectSubset({"a": [1, 2], "b": "b"}, {"a": [3, 4]})).toEqual({"a": [1, 2]}) + ✅ expect(getObjectSubset([{"a": "b", "c": "d"}], [{"a": "z"}])).toEqual([{"a": "b"}]) + ✅ expect(getObjectSubset([1, 2], [1, 2, 3])).toEqual([1, 2]) + ✅ expect(getObjectSubset({"a": [1]}, {"a": [1, 2]})).toEqual({"a": [1]}) + ✅ expect(getObjectSubset(2015-11-30T00:00:00.000Z, 2016-12-30T00:00:00.000Z)).toEqual(2015-11-30T00:00:00.000Z) +getObjectSubset returns the object instance if the subset has no extra properties + ✅ Date +getObjectSubset returns the subset instance if its property values are equal + ✅ Object +getObjectSubset returns the subset instance if its property values are equal Uint8Array + ✅ expected + ✅ received +getObjectSubset calculating subsets of objects with circular references + ✅ simple circular references + ✅ transitive circular references +emptyObject() + ✅ matches an empty object + ✅ does not match an object with keys + ✅ does not match a non-object +subsetEquality() + ✅ matching object returns true + ✅ object without keys is undefined + ✅ objects to not match + ✅ null does not return errors + ✅ undefined does not return errors +subsetEquality() matching subsets with circular references + ✅ simple circular references + ✅ referenced object on same level should not regarded as circular reference + ✅ transitive circular references +iterableEquality + ✅ returns true when given circular iterators + ✅ returns true when given circular Set + ✅ returns true when given nested Sets + ✅ returns false when given inequal set within a set + ✅ returns false when given inequal map within a set + ✅ returns false when given inequal set within a map + ✅ returns true when given circular Set shape + ✅ returns true when given circular key in Map + ✅ returns true when given nested Maps + ✅ returns true when given circular key and value in Map + ✅ returns true when given circular value in Map +``` +### ✅ packages/jest-circus/src/__tests__/afterAll.test.ts +``` +✅ tests are not marked done until their parent afterAll runs +✅ describe block cannot have hooks and no tests +✅ describe block _can_ have hooks if a child describe block has tests +✅ describe block hooks must not run if describe block is skipped +✅ child tests marked with todo should not run if describe block is skipped +✅ child tests marked with only should not run if describe block is skipped +``` +### ✅ packages/jest-circus/src/__tests__/baseTest.test.ts +``` +✅ simple test +✅ failures +``` +### ✅ packages/jest-circus/src/__tests__/circusItTestError.test.ts +``` +test/it error throwing + ✅ it doesn't throw an error with valid arguments + ✅ it throws error with missing callback function + ✅ it throws an error when first argument isn't a string + ✅ it throws an error when callback function is not a function + ✅ test doesn't throw an error with valid arguments + ✅ test throws error with missing callback function + ✅ test throws an error when first argument isn't a string + ✅ test throws an error when callback function is not a function +``` +### ✅ packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts +``` +test/it.todo error throwing + ✅ todo throws error when given no arguments + ✅ todo throws error when given more than one argument + ✅ todo throws error when given none string description +``` +### ✅ packages/jest-circus/src/__tests__/hooks.test.ts +``` +✅ beforeEach is executed before each test in current/child describe blocks +✅ multiple before each hooks in one describe are executed in the right order +✅ beforeAll is exectued correctly +``` +### ✅ packages/jest-circus/src/__tests__/hooksError.test.ts +``` +beforeEach hooks error throwing + ✅ beforeEach throws an error when "String" is provided as a first argument to it + ✅ beforeEach throws an error when 1 is provided as a first argument to it + ✅ beforeEach throws an error when [] is provided as a first argument to it + ✅ beforeEach throws an error when {} is provided as a first argument to it + ✅ beforeEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeEach throws an error when true is provided as a first argument to it + ✅ beforeEach throws an error when null is provided as a first argument to it + ✅ beforeEach throws an error when undefined is provided as a first argument to it +beforeAll hooks error throwing + ✅ beforeAll throws an error when "String" is provided as a first argument to it + ✅ beforeAll throws an error when 1 is provided as a first argument to it + ✅ beforeAll throws an error when [] is provided as a first argument to it + ✅ beforeAll throws an error when {} is provided as a first argument to it + ✅ beforeAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeAll throws an error when true is provided as a first argument to it + ✅ beforeAll throws an error when null is provided as a first argument to it + ✅ beforeAll throws an error when undefined is provided as a first argument to it +afterEach hooks error throwing + ✅ afterEach throws an error when "String" is provided as a first argument to it + ✅ afterEach throws an error when 1 is provided as a first argument to it + ✅ afterEach throws an error when [] is provided as a first argument to it + ✅ afterEach throws an error when {} is provided as a first argument to it + ✅ afterEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterEach throws an error when true is provided as a first argument to it + ✅ afterEach throws an error when null is provided as a first argument to it + ✅ afterEach throws an error when undefined is provided as a first argument to it +afterAll hooks error throwing + ✅ afterAll throws an error when "String" is provided as a first argument to it + ✅ afterAll throws an error when 1 is provided as a first argument to it + ✅ afterAll throws an error when [] is provided as a first argument to it + ✅ afterAll throws an error when {} is provided as a first argument to it + ✅ afterAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterAll throws an error when true is provided as a first argument to it + ✅ afterAll throws an error when null is provided as a first argument to it + ✅ afterAll throws an error when undefined is provided as a first argument to it +``` +### ✅ packages/jest-cli/src/__tests__/cli/args.test.ts +``` +check + ✅ returns true if the arguments are valid + ✅ raises an exception if runInBand and maxWorkers are both specified + ✅ raises an exception if onlyChanged and watchAll are both specified + ✅ raises an exception if onlyFailures and watchAll are both specified + ✅ raises an exception when lastCommit and watchAll are both specified + ✅ raises an exception if findRelatedTests is specified with no file paths + ✅ raises an exception if maxWorkers is specified with no number + ✅ allows maxWorkers to be a % + ✅ allows using "js" file for --config option + ✅ allows using "ts" file for --config option + ✅ allows using "mjs" file for --config option + ✅ allows using "cjs" file for --config option + ✅ allows using "json" file for --config option + ✅ raises an exception if selectProjects is not provided any project names + ✅ raises an exception if config is not a valid JSON string + ✅ raises an exception if config is not a supported file type +buildArgv + ✅ should return only camelcased args +``` +### ✅ packages/jest-cli/src/init/__tests__/init.test.js +``` +init project with package.json and no jest config all questions answered with answer: "No" + ✅ should return the default configuration (an empty config) + ✅ should generate empty config with mjs extension +init project with package.json and no jest config some questions answered with answer: "Yes" + ✅ should create configuration for {clearMocks: true} + ✅ should create configuration for {coverage: true} + ✅ should create configuration for {coverageProvider: "babel"} + ✅ should create configuration for {coverageProvider: "v8"} + ✅ should create configuration for {environment: "jsdom"} + ✅ should create configuration for {environment: "node"} + ✅ should create package.json with configured test command when {scripts: true} +init no package json + ✅ should throw an error if there is no package.json file +init has-jest-config-file-js ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-ts ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-mjs ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-cjs ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-json ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init project using jest.config.ts ask the user whether he wants to use Typescript or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has jest config in package.json + ✅ should ask the user whether to override config or not +init already has "jest" in packageJson.scripts.test + ✅ should not ask "test script question" +``` +### ✅ packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts +``` +✅ should remove jest config if exists +✅ should add test script when there are no scripts +✅ should add test script when there are scripts +✅ should not add test script when { shouldModifyScripts: false } +``` +### ✅ packages/jest-config/src/__tests__/Defaults.test.ts +``` +✅ get configuration defaults +``` +### ✅ packages/jest-config/src/__tests__/getMaxWorkers.test.ts +``` +getMaxWorkers + ✅ Returns 1 when runInBand + ✅ Returns 1 when the OS CPUs are not available + ✅ Returns the `maxWorkers` when specified + ✅ Returns based on the number of cpus +getMaxWorkers % based + ✅ 50% = 2 workers + ✅ < 0 workers should become 1 + ✅ 0% shouldn't break +``` +### ✅ packages/jest-config/src/__tests__/normalize.test.js +``` +✅ picks a name based on the rootDir +✅ keeps custom project name based on the projects rootDir +✅ keeps custom names based on the rootDir +✅ minimal config is stable across runs +✅ sets coverageReporters correctly when argv.json is set +rootDir + ✅ throws if the options is missing a rootDir property +automock + ✅ falsy automock is not overwritten +collectCoverageOnlyFrom + ✅ normalizes all paths relative to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +collectCoverageFrom + ✅ substitutes tokens +findRelatedTests + ✅ it generates --coverageCoverageFrom patterns when needed +roots + ✅ normalizes all paths relative to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +transform + ✅ normalizes the path + ✅ pulls in config if it's passed as an array, and defaults to empty object +haste + ✅ normalizes the path for hasteImplModulePath +setupFilesAfterEnv + ✅ normalizes the path according to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +setupTestFrameworkScriptFile + ✅ logs a deprecation warning when `setupTestFrameworkScriptFile` is used + ✅ logs an error when `setupTestFrameworkScriptFile` and `setupFilesAfterEnv` are used +coveragePathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +watchPathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +testPathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +modulePathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +testRunner + ✅ defaults to Circus + ✅ resolves jasmine + ✅ is overwritten by argv +coverageDirectory + ✅ defaults to /coverage +testEnvironment + ✅ resolves to an environment and prefers jest-environment-`name` + ✅ throws on invalid environment names + ✅ works with rootDir +babel-jest + ✅ correctly identifies and uses babel-jest + ✅ uses babel-jest if babel-jest is explicitly specified in a custom transform options +Upgrade help + ✅ logs a warning when `scriptPreprocessor` and/or `preprocessorIgnorePatterns` are used +testRegex + ✅ testRegex empty string is mapped to empty array + ✅ testRegex string is mapped to an array + ✅ testRegex array is preserved +testMatch + ✅ testMatch default not applied if testRegex is set + ✅ testRegex default not applied if testMatch is set + ✅ throws if testRegex and testMatch are both specified + ✅ normalizes testMatch +moduleDirectories + ✅ defaults to node_modules + ✅ normalizes moduleDirectories +preset + ✅ throws when preset not found + ✅ throws when module was found but no "jest-preset.js" or "jest-preset.json" files + ✅ throws when a dependency is missing in the preset + ✅ throws when preset is invalid + ✅ throws when preset evaluation throws type error + ✅ works with "react-native" + ✅ searches for .json and .js preset files + ✅ merges with options + ✅ merges with options and moduleNameMapper preset is overridden by options + ✅ merges with options and transform preset is overridden by options + ✅ extracts setupFilesAfterEnv from preset +preset with globals + ✅ should merge the globals preset correctly +preset without setupFiles + ✅ should normalize setupFiles correctly +preset without setupFilesAfterEnv + ✅ should normalize setupFilesAfterEnv correctly +runner + ✅ defaults to `jest-runner` + ✅ resolves to runners that do not have the prefix + ✅ resolves to runners and prefers jest-runner-`name` + ✅ throw error when a runner is not found +watchPlugins + ✅ defaults to undefined + ✅ resolves to watch plugins and prefers jest-watch-`name` + ✅ resolves watch plugins that do not have the prefix + ✅ normalizes multiple watchPlugins + ✅ throw error when a watch plugin is not found +testPathPattern + ✅ defaults to empty + ✅ joins multiple --testPathPatterns and + ✅ gives precedence to --all +testPathPattern --testPathPattern + ✅ uses --testPathPattern if set + ✅ ignores invalid regular expressions and logs a warning + ✅ joins multiple --testPathPattern if set +testPathPattern --testPathPattern posix + ✅ should not escape the pattern +testPathPattern --testPathPattern win32 + ✅ preserves any use of "\" + ✅ replaces POSIX path separators + ✅ replaces POSIX paths in multiple args + ✅ coerces all patterns to strings +testPathPattern + ✅ uses if set + ✅ ignores invalid regular expressions and logs a warning + ✅ joins multiple if set +testPathPattern posix + ✅ should not escape the pattern +testPathPattern win32 + ✅ preserves any use of "\" + ✅ replaces POSIX path separators + ✅ replaces POSIX paths in multiple args + ✅ coerces all patterns to strings +moduleFileExtensions + ✅ defaults to something useful + ✅ throws if missing `js` but using jest-runner + ✅ does not throw if missing `js` with a custom runner +cwd + ✅ is set to process.cwd + ✅ is not lost if the config has its own cwd property +Defaults + ✅ should be accepted by normalize +displayName + ✅ should throw an error when displayName is is an empty object + ✅ should throw an error when displayName is missing color + ✅ should throw an error when displayName is missing name + ✅ should throw an error when displayName is using invalid values + ✅ generates a default color for the runner undefined + ✅ generates a default color for the runner jest-runner + ✅ generates a default color for the runner jest-runner-eslint + ✅ generates a default color for the runner jest-runner-tslint + ✅ generates a default color for the runner jest-runner-tsc +testTimeout + ✅ should return timeout value if defined + ✅ should throw an error if timeout is a negative number +extensionsToTreatAsEsm + ✅ should pass valid config through + ✅ should enforce leading dots + ✅ throws on .js + ✅ throws on .mjs + ✅ throws on .cjs +``` +### ✅ packages/jest-config/src/__tests__/readConfig.test.ts +``` +✅ readConfig() throws when an object is passed without a file path +``` +### ✅ packages/jest-config/src/__tests__/readConfigs.test.ts +``` +✅ readConfigs() throws when called without project paths +✅ readConfigs() loads async config file +✅ readConfigs() reject if async was rejected +``` +### ✅ packages/jest-config/src/__tests__/resolveConfigPath.test.ts +``` +Resolve config path .js + ✅ file path with ".js" + ✅ directory path with ".js" +Resolve config path .ts + ✅ file path with ".ts" + ✅ directory path with ".ts" +Resolve config path .mjs + ✅ file path with ".mjs" + ✅ directory path with ".mjs" +Resolve config path .cjs + ✅ file path with ".cjs" + ✅ directory path with ".cjs" +Resolve config path .json + ✅ file path with ".json" + ✅ directory path with ".json" +``` +### ✅ packages/jest-config/src/__tests__/setFromArgv.test.ts +``` +✅ maps special values to valid options +✅ maps regular values to themselves +✅ works with string objects +✅ explicit flags override those from --config +``` +### ✅ packages/jest-config/src/__tests__/validatePattern.test.ts +``` +validate pattern function + ✅ without passed args returns true + ✅ returns true for empty pattern + ✅ returns true for valid pattern + ✅ returns false for invalid pattern +``` +### ✅ packages/jest-console/src/__tests__/bufferedConsole.test.ts +``` +CustomConsole assert + ✅ do not log when the assertion is truthy + ✅ do not log when the assertion is truthy and there is a message + ✅ log the assertion error when the assertion is falsy + ✅ log the assertion error when the assertion is falsy with another message argument +CustomConsole count + ✅ count using the default counter + ✅ count using the a labeled counter + ✅ countReset restarts default counter + ✅ countReset restarts custom counter +CustomConsole group + ✅ group without label + ✅ group with label + ✅ groupEnd remove the indentation of the current group + ✅ groupEnd can not remove the indentation below the starting point +CustomConsole time + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer +CustomConsole dir + ✅ should print the deepest value +CustomConsole timeLog + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer + ✅ default timer with data + ✅ custom timer with data +CustomConsole console + ✅ should be able to initialize console instance +``` +### ✅ packages/jest-console/src/__tests__/CustomConsole.test.ts +``` +CustomConsole log + ✅ should print to stdout +CustomConsole error + ✅ should print to stderr +CustomConsole warn + ✅ should print to stderr +CustomConsole assert + ✅ do not log when the assertion is truthy + ✅ do not log when the assertion is truthy and there is a message + ✅ log the assertion error when the assertion is falsy + ✅ log the assertion error when the assertion is falsy with another message argument +CustomConsole count + ✅ count using the default counter + ✅ count using the a labeled counter + ✅ countReset restarts default counter + ✅ countReset restarts custom counter +CustomConsole group + ✅ group without label + ✅ group with label + ✅ groupEnd remove the indentation of the current group + ✅ groupEnd can not remove the indentation below the starting point +CustomConsole time + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer +CustomConsole dir + ✅ should print the deepest value +CustomConsole timeLog + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer + ✅ default timer with data + ✅ custom timer with data +CustomConsole console + ✅ should be able to initialize console instance +``` +### ✅ packages/jest-console/src/__tests__/getConsoleOutput.test.ts +``` +getConsoleOutput + ✅ takes noStackTrace and pass it on for assert + ✅ takes noStackTrace and pass it on for count + ✅ takes noStackTrace and pass it on for debug + ✅ takes noStackTrace and pass it on for dir + ✅ takes noStackTrace and pass it on for dirxml + ✅ takes noStackTrace and pass it on for error + ✅ takes noStackTrace and pass it on for group + ✅ takes noStackTrace and pass it on for groupCollapsed + ✅ takes noStackTrace and pass it on for info + ✅ takes noStackTrace and pass it on for log + ✅ takes noStackTrace and pass it on for time + ✅ takes noStackTrace and pass it on for warn +``` +### ✅ packages/jest-core/src/__tests__/FailedTestsCache.test.js +``` +FailedTestsCache + ✅ should filter tests +``` +### ✅ packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js +``` +getNoTestsFoundMessage + ✅ returns correct message when monitoring only failures + ✅ returns correct message when monitoring only changed + ✅ returns correct message with verbose option + ✅ returns correct message without options + ✅ returns correct message with passWithNoTests +``` +### ✅ packages/jest-core/src/__tests__/globals.test.ts +``` +Common globals + ✅ check process +``` +### ✅ packages/jest-core/src/__tests__/runJest.test.js +``` +runJest + ✅ when watch is set then exit process + ✅ when watch is set then an error message is printed +``` +### ✅ packages/jest-core/src/__tests__/SearchSource.test.ts +``` +SearchSource isTestFilePath + ✅ supports ../ paths and unix separators via testRegex + ✅ supports unix separators + ✅ supports win32 separators +SearchSource testPathsMatching + ✅ finds tests matching a pattern via testRegex + ✅ finds tests matching a pattern via testMatch + ✅ finds tests matching a JS regex pattern + ✅ finds tests matching a JS glob pattern + ✅ finds tests matching a JS with overriding glob patterns + ✅ finds tests with default file extensions using testRegex + ✅ finds tests with default file extensions using testMatch + ✅ finds tests with parentheses in their rootDir when using testMatch + ✅ finds tests with similar but custom file extensions + ✅ finds tests with totally custom foobar file extensions + ✅ finds tests with many kinds of file extensions + ✅ finds tests using a regex only + ✅ finds tests using a glob only +SearchSource findRelatedTests + ✅ makes sure a file is related to itself + ✅ finds tests that depend directly on the path + ✅ excludes untested files from coverage +SearchSource findRelatedTestsFromPattern + ✅ returns empty search result for empty input + ✅ returns empty search result for invalid input + ✅ returns empty search result if no related tests were found + ✅ finds tests for a single file + ✅ finds tests for multiple files + ✅ does not mistake roots folders with prefix names +SearchSource findRelatedSourcesFromTestsInChangedFiles + ✅ return empty set if no SCM + ✅ return sources required by tests +``` +### ✅ packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js +``` +SnapshotInteractiveMode + ✅ is inactive at construction + ✅ call to run process the first file + ✅ call to abort + ✅ call to reset + ✅ press Q or ESC triggers an abort + ✅ press ENTER trigger a run + ✅ skip 1 test, then restart + ✅ skip 1 test, then quit + ✅ update 1 test, then finish and return + ✅ skip 2 tests, then finish and restart + ✅ update 2 tests, then finish and return + ✅ update 1 test, skip 1 test, then finish and restart + ✅ skip 1 test, update 1 test, then finish and restart +``` +### ✅ packages/jest-core/src/__tests__/TestScheduler.test.js +``` +✅ config for reporters supports `default` +✅ .addReporter() .removeReporter() +✅ schedule tests run in parallel per default +✅ schedule tests run in serial if the runner flags them +✅ should bail after `n` failures +✅ should not bail if less than `n` failures +✅ should set runInBand to run in serial +✅ should set runInBand to not run in serial +``` +### ✅ packages/jest-core/src/__tests__/testSchedulerHelper.test.js +``` +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +``` +### ✅ packages/jest-core/src/__tests__/watch.test.js +``` +Watch mode flows + ✅ Correctly passing test path pattern + ✅ Correctly passing test name pattern + ✅ Runs Jest once by default and shows usage + ✅ Runs Jest in a non-interactive environment not showing usage + ✅ resolves relative to the package root + ✅ shows prompts for WatchPlugins in alphabetical order + ✅ shows update snapshot prompt (without interactive) + ✅ shows update snapshot prompt (with interactive) + ✅ allows WatchPlugins to hook into JestHook + ✅ allows WatchPlugins to override eligible internal plugins + ✅ allows WatchPlugins to be configured + ✅ allows WatchPlugins to hook into file system changes + ✅ makes watch plugin initialization errors look nice + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ triggers enter on a WatchPlugin when its key is pressed + ✅ prevents Jest from handling keys when active and returns control when end is called + ✅ Pressing "o" runs test in "only changed files" mode + ✅ Pressing "a" runs test in "watch all" mode + ✅ Pressing "ENTER" reruns the tests + ✅ Pressing "t" reruns the tests in "test name pattern" mode + ✅ Pressing "p" reruns the tests in "filename pattern" mode + ✅ Can combine "p" and "t" filters + ✅ Pressing "u" reruns the tests in "update snapshot" mode + ✅ passWithNoTest should be set to true in watch mode + ✅ shows the correct usage for the f key in "only failed tests" mode +Watch mode flows when dealing with potential watch plugin key conflicts + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ allows WatchPlugins to override non-reserved internal plugins + ✅ allows WatchPlugins to override non-reserved internal plugins + ✅ forbids third-party WatchPlugins overriding each other +``` +### ✅ packages/jest-core/src/__tests__/watchFileChanges.test.ts +``` +Watch mode flows with changed files + ✅ should correct require new files without legacy cache +``` +### ✅ packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js +``` +Watch mode flows + ✅ Pressing "P" enters pattern mode + ✅ Pressing "c" clears the filters +``` +### ✅ packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js +``` +Watch mode flows + ✅ Pressing "T" enters pattern mode +``` +### ✅ packages/jest-core/src/lib/__tests__/isValidPath.test.ts +``` +✅ is valid when it is a file inside roots +✅ is not valid when it is a snapshot file +✅ is not valid when it is a file in the coverage dir +``` +### ✅ packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts +``` +✅ prints the jest version +✅ prints the test framework name +✅ prints the config object +``` +### ✅ packages/jest-create-cache-key-function/src/__tests__/index.test.ts +``` +✅ creation of a cache key +``` +### ✅ packages/jest-diff/src/__tests__/diff.test.ts +``` +different types + ✅ '1' and 'a' + ✅ '[object Object]' and 'a' + ✅ '' and '2' + ✅ 'null' and 'undefined' + ✅ '() => {}' and '3' +no visual difference + ✅ '"a"' and '"a"' + ✅ '{}' and '{}' + ✅ '[]' and '[]' + ✅ '[1,2]' and '[1,2]' + ✅ '11' and '11' + ✅ 'null' and 'null' + ✅ 'null' and 'null' + ✅ 'undefined' and 'undefined' + ✅ 'null' and 'null' + ✅ 'undefined' and 'undefined' + ✅ 'false' and 'false' + ✅ '{"a":1}' and '{"a":1}' + ✅ '{"a":{"b":5}}' and '{"a":{"b":5}}' + ✅ Map key order should be irrelevant + ✅ Set value order should be irrelevant +✅ oneline strings +✅ numbers +✅ -0 and 0 +✅ booleans +✅ collapses big diffs to patch format +falls back to not call toJSON if serialization has no differences + ✅ but then objects have differences + ✅ and then objects have no differences +falls back to not call toJSON if it throws + ✅ and then objects have differences + ✅ and then objects have no differences +multiline strings + ✅ (unexpanded) + ✅ (expanded) +objects + ✅ (unexpanded) + ✅ (expanded) +multiline string non-snapshot + ✅ (unexpanded) + ✅ (expanded) +multiline string snapshot + ✅ (unexpanded) + ✅ (expanded) +React elements + ✅ (unexpanded) + ✅ (expanded) +multiline string as value of object property (non-snapshot) + ✅ (unexpanded) + ✅ (expanded) +multiline string as value of object property (snapshot) + ✅ (unexpanded) + ✅ (expanded) +indentation in JavaScript structures from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in JavaScript structures from more to less + ✅ (unexpanded) + ✅ (expanded) +color of text + ✅ (expanded) + ✅ (unexpanded) +indentation in React elements (non-snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (non-snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +outer React element (non-snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +outer React element (non-snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +trailing newline in multiline string not enclosed in quotes from less to more + ✅ (unexpanded) + ✅ (expanded) +trailing newline in multiline string not enclosed in quotes from more to less + ✅ (unexpanded) + ✅ (expanded) +context + ✅ number of lines: -1 (5 default) + ✅ number of lines: 0 + ✅ number of lines: 1 + ✅ number of lines: 2 + ✅ number of lines: 3.1 (5 default) + ✅ number of lines: undefined (5 default) +diffLinesUnified edge cases + ✅ a empty string b empty string + ✅ a empty string b one line + ✅ a multiple lines b empty string + ✅ a one line b multiple lines +diffLinesUnified2 edge cases + ✅ a empty string b empty string + ✅ a empty string b one line + ✅ a multiple lines b empty string + ✅ a one line b multiple lines +diffLinesUnified2 edge cases lengths not equal + ✅ a + ✅ b +diffStringsUnified edge cases + ✅ empty both a and b + ✅ empty only a + ✅ empty only b + ✅ equal both non-empty + ✅ multiline has no common after clean up chaff + ✅ one-line has no common after clean up chaff +options 7980 + ✅ diff + ✅ diffStringsUnified +options change indicators + ✅ diff +options change color + ✅ diffStringsUnified + ✅ no diff +options common + ✅ diff + ✅ no diff +options includeChangeCounts false + ✅ diffLinesUnified + ✅ diffStringsUnified +options includeChangeCounts true padding + ✅ diffLinesUnified a has 2 digits + ✅ diffLinesUnified b has 2 digits + ✅ diffStringsUnified +options omitAnnotationLines true + ✅ diff + ✅ diffStringsUnified and includeChangeCounts true + ✅ diffStringsUnified empty strings +options trailingSpaceFormatter + ✅ diffDefault default no color + ✅ diffDefault middle dot + ✅ diffDefault yellowish common +options emptyFirstOrLastLinePlaceholder default empty string + ✅ diffDefault + ✅ diffStringsUnified +``` +### ✅ packages/jest-diff/src/__tests__/diffStringsRaw.test.ts +``` +diffStringsRaw + ✅ one-line with cleanup + ✅ one-line without cleanup +``` +### ✅ packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts +``` +getAlignedDiffs lines + ✅ change preceding and following common + ✅ common preceding and following change + ✅ common at end when both current change lines are empty + ✅ common between delete and insert + ✅ common between insert and delete +getAlignedDiffs newline + ✅ delete only + ✅ insert only + ✅ delete with adjacent change + ✅ insert with adjacent changes + ✅ change from space + ✅ change to space +getAlignedDiffs substrings first + ✅ common when both current change lines are empty + ✅ common when either current change line is non-empty + ✅ delete completes the current line + ✅ insert completes the current line +getAlignedDiffs substrings middle + ✅ is empty in delete between common + ✅ is empty in insert at start + ✅ is non-empty in delete at end + ✅ is non-empty in insert between common +getAlignedDiffs substrings last + ✅ is empty in delete at end + ✅ is empty in insert at end + ✅ is non-empty in common not at end +getAlignedDiffs strings + ✅ change at start and delete or insert at end + ✅ delete or insert at start and change at end +``` +### ✅ packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts +``` +joinAlignedDiffsExpand + ✅ first line is empty common +joinAlignedDiffsNoExpand + ✅ patch 0 with context 1 and change at start and end + ✅ patch 0 with context 5 and first line is empty common + ✅ patch 1 with context 4 and last line is empty common + ✅ patch 2 with context 3 + ✅ patch 3 with context 2 and omit excess common at start +``` +### ✅ packages/jest-docblock/src/__tests__/index.test.ts +``` +docblock + ✅ extracts valid docblock with line comment + ✅ extracts valid docblock + ✅ extracts valid docblock with more comments + ✅ extracts from invalid docblock + ✅ returns extract and parsedocblock + ✅ parses directives out of a docblock + ✅ parses multiple of the same directives out of a docblock + ✅ parses >=3 of the same directives out of a docblock + ✅ parses directives out of a docblock with comments + ✅ parses directives out of a docblock with line comments + ✅ parses multiline directives + ✅ parses multiline directives even if there are linecomments within the docblock + ✅ supports slashes in @team directive + ✅ extracts comments from docblock + ✅ extracts multiline comments from docblock + ✅ preserves leading whitespace in multiline comments from docblock + ✅ removes leading newlines in multiline comments from docblock + ✅ extracts comments from beginning and end of docblock + ✅ preserve urls within a pragma's values + ✅ strip linecomments from pragmas but preserve for comments + ✅ extracts docblock comments as CRLF when docblock contains CRLF + ✅ extracts docblock comments as LF when docblock contains LF + ✅ strips the docblock out of a file that contains a top docblock + ✅ returns a file unchanged if there is no top docblock to strip + ✅ prints docblocks with no pragmas as empty string + ✅ prints docblocks with one pragma on one line + ✅ prints docblocks with multiple pragmas on multiple lines + ✅ prints docblocks with multiple of the same pragma + ✅ prints docblocks with pragmas + ✅ prints docblocks with comments + ✅ prints docblocks with comments and no keys + ✅ prints docblocks with multiline comments + ✅ prints docblocks that are parseable + ✅ can augment existing docblocks with comments + ✅ prints docblocks using CRLF if comments contains CRLF + ✅ prints docblocks using LF if comments contains LF +``` +### ✅ packages/jest-each/src/__tests__/array.test.ts +``` +jest-each .test + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent.skip + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .test.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .it + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .fit + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .it.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .describe + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .fdescribe + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .describe.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each done callback + ✅ calls [ 'test' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it' ] with done when cb function has more args than params of given test row + ✅ calls [ 'fit' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it', 'only' ] with done when cb function has more args than params of given test row + ✅ does not call [ 'describe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'fdescribe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row +jest-each .xtest + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .test.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .xit + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .it.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .xdescribe + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .describe.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +``` +### ✅ packages/jest-each/src/__tests__/index.test.ts +``` +array .add + ✅ returns the result of adding 0 to 0 + ✅ returns the result of adding 0 to 1 + ✅ returns the result of adding 1 to 1 +concurrent .add + ✅ returns the result of adding 0 to 0 + ✅ returns the result of adding 0 to 1 + ✅ returns the result of adding 1 to 1 +template .add + ✅ returns 0 when given 0 and 0 + ✅ returns 1 when given 0 and 1 + ✅ returns 2 when given 1 and 1 +✅ throws an error when not called with the right number of arguments +``` +### ✅ packages/jest-each/src/__tests__/template.test.ts +``` +jest-each .test + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .test.concurrent + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.concurrent.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .test.concurrent.skip + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .it + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .fit + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .it.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .describe + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .fdescribe + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .describe.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each done callback + ✅ calls [ 'test' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it' ] with done when cb function has more args than params of given test row + ✅ calls [ 'fit' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it', 'only' ] with done when cb function has more args than params of given test row + ✅ does not call [ 'describe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'fdescribe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row +jest-each .xtest + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .xit + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .it.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .xdescribe + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .describe.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +``` +### ✅ packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts +``` +JSDomEnvironment + ✅ should configure setTimeout/setInterval to use the browser api + ✅ has modern fake timers implementation +``` +### ✅ packages/jest-environment-node/src/__tests__/node_environment.test.ts +``` +NodeEnvironment + ✅ uses a copy of the process object + ✅ exposes process.on + ✅ exposes global.global + ✅ should configure setTimeout/setInterval to use the node api + ✅ has modern fake timers implementation + ✅ TextEncoder references the same global Uint8Array constructor +``` +### ✅ packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts +``` +FakeTimers construction + ✅ installs setTimeout mock + ✅ accepts to promisify setTimeout mock + ✅ installs clearTimeout mock + ✅ installs setInterval mock + ✅ installs clearInterval mock + ✅ mocks process.nextTick if it exists on global + ✅ mocks setImmediate if it exists on global + ✅ mocks clearImmediate if setImmediate is on global +FakeTimers runAllTicks + ✅ runs all ticks, in order + ✅ does nothing when no ticks have been scheduled + ✅ only runs a scheduled callback once + ✅ cancels a callback even from native nextTick + ✅ cancels a callback even from native setImmediate + ✅ doesnt run a tick callback if native nextTick already did + ✅ doesnt run immediate if native setImmediate already did + ✅ native doesnt run immediate if fake already did + ✅ throws before allowing infinite recursion +FakeTimers runAllTimers + ✅ runs all timers in order + ✅ warns when trying to advance timers while real timers are used + ✅ does nothing when no timers have been scheduled + ✅ only runs a setTimeout callback once (ever) + ✅ runs callbacks with arguments after the interval + ✅ doesnt pass the callback to native setTimeout + ✅ throws before allowing infinite recursion + ✅ also clears ticks +FakeTimers advanceTimersByTime + ✅ runs timers in order + ✅ does nothing when no timers have been scheduled + ✅ throws before allowing infinite recursion +FakeTimers advanceTimersToNextTimer + ✅ runs timers in order + ✅ run correct amount of steps + ✅ setTimeout inside setTimeout + ✅ does nothing when no timers have been scheduled +FakeTimers reset + ✅ resets all pending setTimeouts + ✅ resets all pending setIntervals + ✅ resets all pending ticks callbacks & immediates + ✅ resets current advanceTimersByTime time cursor +FakeTimers runOnlyPendingTimers + ✅ runs all timers in order + ✅ does not run timers that were cleared in another timer +FakeTimers runWithRealTimers + ✅ executes callback with native timers + ✅ resets mock timers after executing callback + ✅ resets mock timer functions even if callback throws +FakeTimers useRealTimers + ✅ resets native timer APIs + ✅ resets native process.nextTick when present + ✅ resets native setImmediate when present +FakeTimers useFakeTimers + ✅ resets mock timer APIs + ✅ resets mock process.nextTick when present + ✅ resets mock setImmediate when present +FakeTimers getTimerCount + ✅ returns the correct count + ✅ includes immediates and ticks + ✅ not includes cancelled immediates +``` +### ✅ packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts +``` +FakeTimers construction + ✅ installs setTimeout mock + ✅ installs clearTimeout mock + ✅ installs setInterval mock + ✅ installs clearInterval mock + ✅ mocks process.nextTick if it exists on global + ✅ mocks setImmediate if it exists on global + ✅ mocks clearImmediate if setImmediate is on global +FakeTimers runAllTicks + ✅ runs all ticks, in order + ✅ does nothing when no ticks have been scheduled + ✅ only runs a scheduled callback once + ✅ throws before allowing infinite recursion +FakeTimers runAllTimers + ✅ runs all timers in order + ✅ warns when trying to advance timers while real timers are used + ✅ does nothing when no timers have been scheduled + ✅ only runs a setTimeout callback once (ever) + ✅ runs callbacks with arguments after the interval + ✅ doesn't pass the callback to native setTimeout + ✅ throws before allowing infinite recursion + ✅ also clears ticks +FakeTimers advanceTimersByTime + ✅ runs timers in order + ✅ does nothing when no timers have been scheduled +FakeTimers advanceTimersToNextTimer + ✅ runs timers in order + ✅ run correct amount of steps + ✅ setTimeout inside setTimeout + ✅ does nothing when no timers have been scheduled +FakeTimers reset + ✅ resets all pending setTimeouts + ✅ resets all pending setIntervals + ✅ resets all pending ticks callbacks + ✅ resets current advanceTimersByTime time cursor +FakeTimers runOnlyPendingTimers + ✅ runs all timers in order + ✅ does not run timers that were cleared in another timer +FakeTimers useRealTimers + ✅ resets native timer APIs + ✅ resets native process.nextTick when present + ✅ resets native setImmediate when present +FakeTimers useFakeTimers + ✅ resets mock timer APIs + ✅ resets mock process.nextTick when present + ✅ resets mock setImmediate when present +FakeTimers getTimerCount + ✅ returns the correct count + ✅ includes immediates and ticks + ✅ not includes cancelled immediates +``` +### ✅ packages/jest-get-type/src/__tests__/getType.test.ts +``` +.getType() + ✅ null + ✅ undefined + ✅ object + ✅ array + ✅ number + ✅ string + ✅ function + ✅ boolean + ✅ symbol + ✅ regexp + ✅ map + ✅ set + ✅ date + ✅ bigint +``` +### ✅ packages/jest-get-type/src/__tests__/isPrimitive.test.ts +``` +.isPrimitive() + ✅ returns true when given primitive value of: null + ✅ returns true when given primitive value of: undefined + ✅ returns true when given primitive value of: 100 + ✅ returns true when given primitive value of: hello world + ✅ returns true when given primitive value of: true + ✅ returns true when given primitive value of: Symbol(a) + ✅ returns true when given primitive value of: 0 + ✅ returns true when given primitive value of: NaN + ✅ returns true when given primitive value of: Infinity + ✅ returns true when given primitive value of: 1n + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: [] + ✅ returns false when given non primitive value of: undefined + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: "2021-01-24T19:22:19.272Z" + ✅ returns false when given non primitive value of: {} +``` +### ✅ packages/jest-globals/src/__tests__/index.ts +``` +✅ throw when directly imported +``` +### ✅ packages/jest-haste-map/src/__tests__/get_mock_name.test.js +``` +getMockName + ✅ extracts mock name from file path +``` +### ✅ packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts +``` +✅ watchman crawler and node crawler both include dotfiles +``` +### ✅ packages/jest-haste-map/src/__tests__/index.test.js +``` +HasteMap + ✅ exports constants + ✅ creates valid cache file paths + ✅ creates different cache file paths for different roots + ✅ creates different cache file paths for different dependency extractor cache keys + ✅ creates different cache file paths for different hasteImplModulePath cache keys + ✅ creates different cache file paths for different projects + ✅ matches files against a pattern + ✅ ignores files given a pattern + ✅ ignores vcs directories without ignore pattern + ✅ ignores vcs directories with ignore pattern regex + ✅ warn on ignore pattern except for regex + ✅ builds a haste map on a fresh cache + ✅ does not crawl native files even if requested to do so + ✅ retains all files if `retainAllFiles` is specified + ✅ warns on duplicate mock files + ✅ warns on duplicate module ids + ✅ warns on duplicate module ids only once + ✅ throws on duplicate module ids if "throwOnModuleCollision" is set to true + ✅ splits up modules by platform + ✅ does not access the file system on a warm cache with no changes + ✅ only does minimal file system access when files change + ✅ correctly handles file deletions + ✅ correctly handles platform-specific file additions + ✅ correctly handles platform-specific file deletions + ✅ correctly handles platform-specific file renames + ✅ discards the cache when configuration changes + ✅ ignores files that do not exist + ✅ distributes work across workers + ✅ tries to crawl using node as a fallback + ✅ tries to crawl using node as a fallback when promise fails once + ✅ stops crawling when both crawlers fail +HasteMap builds a haste map on a fresh cache with SHA-1s + ✅ uses watchman: false + ✅ uses watchman: true +HasteMap duplicate modules + ✅ recovers when a duplicate file is deleted + ✅ recovers with the correct type when a duplicate file is deleted + ✅ recovers when a duplicate module is renamed +HasteMap file system changes processing + ✅ provides a new set of hasteHS and moduleMap + ✅ handles several change events at once + ✅ does not emit duplicate change events + ✅ emits a change even if a file in node_modules has changed + ✅ correctly tracks changes to both platform-specific versions of a single module name +HasteMap file system changes processing recovery from duplicate module IDs + ✅ recovers when the oldest version of the duplicates is fixed + ✅ recovers when the most recent duplicate is fixed + ✅ ignore directories +``` +### ✅ packages/jest-haste-map/src/__tests__/worker.test.js +``` +worker + ✅ parses JavaScript files and extracts module information + ✅ accepts a custom dependency extractor + ✅ delegates to hasteImplModulePath for getting the id + ✅ parses package.json files as haste packages + ✅ returns an error when a file cannot be accessed + ✅ simply computes SHA-1s when requested (works well with binary data) + ✅ avoids computing dependencies if not requested and Haste does not need it +``` +### ✅ packages/jest-haste-map/src/crawlers/__tests__/node.test.js +``` +node crawler + ✅ crawls for files based on patterns + ✅ updates only changed files + ✅ returns removed files + ✅ uses node fs APIs with incompatible find binary + ✅ uses node fs APIs without find binary + ✅ uses node fs APIs if "forceNodeFilesystemAPI" is set to true, regardless of platform + ✅ completes with empty roots + ✅ completes with fs.readdir throwing an error +node crawler readdir withFileTypes support + ✅ calls lstat for directories and symlinks if readdir withFileTypes is not supported + ✅ avoids calling lstat for directories and symlinks if readdir withFileTypes is supported +``` +### ✅ packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js +``` +watchman watch + ✅ returns a list of all files when there are no clocks + ✅ updates file map and removedFiles when the clock is given + ✅ resets the file map and tracks removedFiles when watchman is fresh + ✅ properly resets the file map when only one watcher is reset + ✅ does not add directory filters to query when watching a ROOT + ✅ SHA-1 requested and available + ✅ SHA-1 requested and NOT available + ✅ source control query +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js +``` +dependencyExtractor + ✅ should not extract dependencies inside comments + ✅ should not extract dependencies inside comments (windows line endings) + ✅ should not extract dependencies inside comments (unicode line endings) + ✅ should extract dependencies from `import` statements + ✅ should extract dependencies from side-effect only `import` statements + ✅ should not extract dependencies from `import type/typeof` statements + ✅ should extract dependencies from `export` statements + ✅ should extract dependencies from `export-from` statements + ✅ should not extract dependencies from `export type/typeof` statements + ✅ should extract dependencies from dynamic `import` calls + ✅ should extract dependencies from `require` calls + ✅ should extract dependencies from `jest.requireActual` calls + ✅ should extract dependencies from `jest.requireMock` calls + ✅ should extract dependencies from `jest.genMockFromModule` calls + ✅ should extract dependencies from `jest.createMockFromModule` calls +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/fast_path.test.js +``` +fastPath.relative + ✅ should get relative paths inside the root + ✅ should get relative paths outside the root + ✅ should get relative paths outside the root when start with same word +fastPath.resolve + ✅ should get the absolute path for paths inside the root + ✅ should get the absolute path for paths outside the root +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js +``` +getPlatformExtension + ✅ should get platform ext +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js +``` +isRegExpSupported + ✅ should return true when passing valid regular expression + ✅ should return false when passing an invalid regular expression +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js +``` +normalizePathSep + ✅ does nothing on posix + ✅ replace slashes on windows +``` +### ✅ packages/jest-jasmine2/src/__tests__/concurrent.test.ts +``` +concurrent + ✅ should add 1 to number + ✅ should add 1 to number + ✅ should add 1 to number +``` +### ✅ packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts +``` +expectationResultFactory + ✅ returns the result if passed. + ✅ returns the result if failed. + ✅ returns the result if failed (with `message`). + ✅ returns the result if failed (with `error`). + ✅ returns the error name if the error message is empty + ✅ returns the result if failed (with `error` as a string). + ✅ returns the result if failed (with `error.stack` not as a string). +``` +### ✅ packages/jest-jasmine2/src/__tests__/hooksError.test.ts +``` +beforeEach hooks error throwing + ✅ beforeEach throws an error when "String" is provided as a first argument to it + ✅ beforeEach throws an error when 1 is provided as a first argument to it + ✅ beforeEach throws an error when [] is provided as a first argument to it + ✅ beforeEach throws an error when {} is provided as a first argument to it + ✅ beforeEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeEach throws an error when true is provided as a first argument to it + ✅ beforeEach throws an error when null is provided as a first argument to it + ✅ beforeEach throws an error when undefined is provided as a first argument to it +beforeAll hooks error throwing + ✅ beforeAll throws an error when "String" is provided as a first argument to it + ✅ beforeAll throws an error when 1 is provided as a first argument to it + ✅ beforeAll throws an error when [] is provided as a first argument to it + ✅ beforeAll throws an error when {} is provided as a first argument to it + ✅ beforeAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeAll throws an error when true is provided as a first argument to it + ✅ beforeAll throws an error when null is provided as a first argument to it + ✅ beforeAll throws an error when undefined is provided as a first argument to it +afterEach hooks error throwing + ✅ afterEach throws an error when "String" is provided as a first argument to it + ✅ afterEach throws an error when 1 is provided as a first argument to it + ✅ afterEach throws an error when [] is provided as a first argument to it + ✅ afterEach throws an error when {} is provided as a first argument to it + ✅ afterEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterEach throws an error when true is provided as a first argument to it + ✅ afterEach throws an error when null is provided as a first argument to it + ✅ afterEach throws an error when undefined is provided as a first argument to it +afterAll hooks error throwing + ✅ afterAll throws an error when "String" is provided as a first argument to it + ✅ afterAll throws an error when 1 is provided as a first argument to it + ✅ afterAll throws an error when [] is provided as a first argument to it + ✅ afterAll throws an error when {} is provided as a first argument to it + ✅ afterAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterAll throws an error when true is provided as a first argument to it + ✅ afterAll throws an error when null is provided as a first argument to it + ✅ afterAll throws an error when undefined is provided as a first argument to it +``` +### ✅ packages/jest-jasmine2/src/__tests__/iterators.test.ts +``` +iterators + ✅ works for arrays + ✅ works for custom iterables + ✅ works for Sets + ✅ works for Maps +``` +### ✅ packages/jest-jasmine2/src/__tests__/itTestError.test.ts +``` +test/it error throwing + ✅ it throws error with missing callback function + ✅ it throws an error when first argument isn't a string + ✅ it throws an error when callback function is not a function + ✅ test throws error with missing callback function + ✅ test throws an error when first argument isn't a string + ✅ test throws an error when callback function is not a function +``` +### ✅ packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts +``` +✅ global.test +``` +### ✅ packages/jest-jasmine2/src/__tests__/pTimeout.test.ts +``` +pTimeout + ✅ calls `clearTimeout` and resolves when `promise` resolves. + ✅ calls `clearTimeout` and rejects when `promise` rejects. + ✅ calls `onTimeout` on timeout. +``` +### ✅ packages/jest-jasmine2/src/__tests__/queueRunner.test.ts +``` +queueRunner + ✅ runs every function in the queue. + ✅ exposes `fail` to `next`. + ✅ passes errors to `onException`. + ✅ passes an error to `onException` on timeout. + ✅ calls `fail` with arguments + ✅ calls `fail` when done(error) is invoked +``` +### ✅ packages/jest-jasmine2/src/__tests__/reporter.test.ts +``` +Jasmine2Reporter + ✅ reports nested suites +``` +### ✅ packages/jest-jasmine2/src/__tests__/Suite.test.ts +``` +Suite + ✅ doesn't throw on addExpectationResult when there are no children +``` +### ✅ packages/jest-jasmine2/src/__tests__/todoError.test.ts +``` +test/it.todo error throwing + ✅ it throws error when given no arguments + ✅ it throws error when given more than one argument + ✅ it throws error when given none string description +``` +### ✅ packages/jest-leak-detector/src/__tests__/index.test.ts +``` +✅ complains if the value is a primitive +✅ does not show the GC if hidden +✅ does not hide the GC if visible +✅ correctly checks simple leaks +✅ tests different objects +✅ correctly checks more complex leaks +``` +### ✅ packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts +``` +✅ returns the same value for primitive or function values +✅ convert accessor descriptor into value descriptor +✅ shuold not skips non-enumerables +✅ copies symbols +✅ copies arrays as array objects +✅ handles cyclic dependencies +✅ Copy Map +✅ Copy cyclic Map +✅ return same value for built-in object type except array, map and object +✅ should copy object symbol key property +✅ should set writable, configurable to true +``` +### ✅ packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts +``` +✅ should copy dom element +✅ should copy complex element +``` +### ✅ packages/jest-matcher-utils/src/__tests__/index.test.ts +``` +stringify() + ✅ [] + ✅ {} + ✅ 1 + ✅ 0 + ✅ 1.5 + ✅ null + ✅ undefined + ✅ "abc" + ✅ Symbol(abc) + ✅ NaN + ✅ Infinity + ✅ -Infinity + ✅ /ab\.c/gi + ✅ 1n + ✅ 0n + ✅ circular references + ✅ toJSON error + ✅ toJSON errors when comparing two objects + ✅ reduces maxDepth if stringifying very large objects +ensureNumbers() + ✅ dont throw error when variables are numbers + ✅ throws error when expected is not a number (backward compatibility) + ✅ throws error when received is not a number (backward compatibility) +ensureNumbers() with options + ✅ promise empty isNot false received + ✅ promise empty isNot true expected + ✅ promise rejects isNot false expected + ✅ promise rejects isNot true received + ✅ promise resolves isNot false received + ✅ promise resolves isNot true expected +ensureNoExpected() + ✅ dont throw error when undefined + ✅ throws error when expected is not undefined with matcherName + ✅ throws error when expected is not undefined with matcherName and options +diff + ✅ forwards to jest-diff + ✅ two booleans + ✅ two numbers + ✅ two bigints +pluralize() + ✅ one + ✅ two + ✅ 20 +getLabelPrinter + ✅ 0 args + ✅ 1 empty string + ✅ 1 non-empty string + ✅ 2 equal lengths + ✅ 2 unequal lengths + ✅ returns incorrect padding if inconsistent arg is shorter + ✅ throws if inconsistent arg is longer +matcherHint + ✅ expectedColor + ✅ receivedColor + ✅ secondArgumentColor +``` +### ✅ packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts +``` +printDiffOrStringify + ✅ expected is empty and received is single line + ✅ expected is multi line and received is empty + ✅ expected and received are single line with multiple changes + ✅ expected and received are multi line with trailing spaces + ✅ has no common after clean up chaff multiline + ✅ has no common after clean up chaff one-line + ✅ object contain readonly symbol key object +printDiffOrStringify MAX_DIFF_STRING_LENGTH + ✅ both are less + ✅ expected is more + ✅ received is more +printDiffOrStringify asymmetricMatcher + ✅ minimal test + ✅ jest asymmetricMatcher + ✅ custom asymmetricMatcher + ✅ nested object + ✅ array + ✅ object in array + ✅ map + ✅ circular object + ✅ transitive circular + ✅ circular array + ✅ circular map +``` +### ✅ packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts +``` +Replaceable constructor + ✅ init with object + ✅ init with array + ✅ init with Map + ✅ init with other type should throw error +Replaceable get + ✅ get object item + ✅ get array item + ✅ get Map item +Replaceable set + ✅ set object item + ✅ set array item + ✅ set Map item +Replaceable forEach + ✅ object forEach + ✅ array forEach + ✅ map forEach + ✅ forEach should ignore nonenumerable property +Replaceable isReplaceable + ✅ should return true if two object types equal and support + ✅ should return false if two object types not equal + ✅ should return false if object types not support +``` +### ✅ packages/jest-message-util/src/__tests__/messages.test.ts +``` +✅ should exclude jasmine from stack trace for Unix paths. +✅ .formatExecError() +✅ formatStackTrace should strip node internals +✅ should not exclude vendor from stack trace +✅ retains message in babel code frame error +✅ codeframe +✅ no codeframe +✅ no stack +formatStackTrace + ✅ prints code frame and stacktrace + ✅ does not print code frame when noCodeFrame = true + ✅ does not print codeframe when noStackTrace = true +``` +### ✅ packages/jest-mock/src/__tests__/index.test.ts +``` +moduleMocker getMetadata + ✅ returns the function `name` property + ✅ mocks constant values + ✅ does not retrieve metadata for arrays + ✅ does not retrieve metadata for undefined + ✅ does not retrieve metadata for null + ✅ retrieves metadata for ES6 classes + ✅ retrieves synchronous function metadata + ✅ retrieves asynchronous function metadata + ✅ retrieves metadata for object literals and it's members + ✅ retrieves Date object metadata +moduleMocker generateFromMetadata + ✅ forwards the function name property + ✅ fixes illegal function name properties + ✅ special cases the mockConstructor name + ✅ wont interfere with previous mocks on a shared prototype + ✅ does not mock non-enumerable getters + ✅ mocks getters of ES modules + ✅ mocks ES2015 non-enumerable methods + ✅ mocks ES2015 non-enumerable static properties and methods + ✅ mocks methods in all the prototype chain (null prototype) + ✅ does not mock methods from Object.prototype + ✅ does not mock methods from Object.prototype (in mock context) + ✅ does not mock methods from Function.prototype + ✅ does not mock methods from Function.prototype (in mock context) + ✅ does not mock methods from RegExp.prototype + ✅ does not mock methods from RegExp.prototype (in mock context) + ✅ mocks methods that are bound multiple times + ✅ mocks methods that are bound after mocking + ✅ mocks regexp instances + ✅ mocks functions with numeric names + ✅ mocks the method in the passed object itself + ✅ should delete previously inexistent methods when restoring + ✅ supports mock value returning undefined + ✅ supports mock value once returning undefined + ✅ mockReturnValueOnce mocks value just once + ✅ supports mocking resolvable async functions + ✅ supports mocking resolvable async functions only once + ✅ supports mocking rejectable async functions + ✅ supports mocking rejectable async functions only once + ✅ tracks thrown errors without interfering with other tracking + ✅ a call that throws undefined is tracked properly + ✅ results of recursive calls are tracked properly + ✅ test results of recursive calls from within the recursive call + ✅ call mockClear inside recursive mock +moduleMocker generateFromMetadata mocked functions + ✅ tracks calls to mocks + ✅ tracks instances made by mocks + ✅ supports clearing mock calls + ✅ supports clearing mocks + ✅ supports clearing all mocks + ✅ supports resetting mock return values + ✅ supports resetting single use mock return values + ✅ supports resetting mock implementations + ✅ supports resetting single use mock implementations + ✅ supports resetting all mocks + ✅ maintains function arity +moduleMocker generateFromMetadata return values + ✅ tracks return values + ✅ tracks mocked return values + ✅ supports resetting return values +moduleMocker generateFromMetadata invocationCallOrder + ✅ tracks invocationCallOrder made by mocks + ✅ supports clearing mock invocationCallOrder + ✅ supports clearing all mocks invocationCallOrder + ✅ handles a property called `prototype` +moduleMocker getMockImplementation + ✅ should mock calls to a mock function +moduleMocker mockImplementationOnce + ✅ should mock constructor + ✅ should mock single call to a mock function + ✅ should fallback to default mock function when no specific mock is available +moduleMocker + ✅ mockReturnValue does not override mockImplementationOnce + ✅ mockImplementation resets the mock + ✅ should recognize a mocked function + ✅ default mockName is jest.fn() + ✅ mockName sets the mock name + ✅ mockName gets reset by mockReset + ✅ mockName gets reset by mockRestore + ✅ mockName is not reset by mockClear +moduleMocker spyOn + ✅ should work + ✅ should throw on invalid input + ✅ supports restoring all spies + ✅ should work with getters +moduleMocker spyOnProperty + ✅ should work - getter + ✅ should work - setter + ✅ should throw on invalid input + ✅ supports restoring all spies + ✅ should work with getters on the prototype chain + ✅ should work with setters on the prototype chain + ✅ supports restoring all spies on the prototype chain +``` +### ✅ packages/jest-regex-util/src/__tests__/index.test.ts +``` +replacePathSepForRegex() posix + ✅ should return the path +replacePathSepForRegex() win32 + ✅ should replace POSIX path separators + ✅ should escape Windows path separators + ✅ should not escape an escaped dot + ✅ should not escape an escaped regexp symbol + ✅ should escape Windows path separators inside groups + ✅ should escape Windows path separator at the beginning + ✅ should not escape several already escaped path separators +``` +### ✅ packages/jest-repl/src/__tests__/jest_repl.test.js +``` +Repl cli + ✅ runs without errors +``` +### ✅ packages/jest-repl/src/__tests__/runtime_cli.test.js +``` +Runtime CLI + ✅ fails with no path + ✅ displays script output + ✅ always disables automocking + ✅ throws script errors +``` +### ✅ packages/jest-reporters/src/__tests__/CoverageReporter.test.js +``` +onRunComplete + ✅ getLastError() returns an error when threshold is not met for global + ✅ getLastError() returns an error when threshold is not met for file + ✅ getLastError() returns `undefined` when threshold is met + ✅ getLastError() returns an error when threshold is not met for non-covered file + ✅ getLastError() returns an error when threshold is not met for directory + ✅ getLastError() returns `undefined` when threshold is met for directory + ✅ getLastError() returns an error when there is no coverage data for a threshold + ✅ getLastError() returns 'undefined' when global threshold group + is empty because PATH and GLOB threshold groups have matched all the + files in the coverage data. + ✅ getLastError() returns 'undefined' when file and directory path + threshold groups overlap + ✅ that if globs or paths are specified alongside global, coverage + data for matching paths will be subtracted from overall coverage + and thresholds will be applied independently + ✅ that files are matched by all matching threshold groups + ✅ that it passes custom options when creating reporters +``` +### ✅ packages/jest-reporters/src/__tests__/CoverageWorker.test.js +``` +✅ resolves to the result of generateEmptyCoverage upon success +✅ throws errors on invalid JavaScript +``` +### ✅ packages/jest-reporters/src/__tests__/DefaultReporter.test.js +``` +✅ normal output, everything goes to stdout +✅ when using stderr as output, no stdout call is made +``` +### ✅ packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js +``` +generateEmptyCoverage + ✅ generates an empty coverage object for a file without running it + ✅ generates a null coverage result when using /* istanbul ignore file */ + ✅ generates a null coverage result when collectCoverage global config is false +``` +### ✅ packages/jest-reporters/src/__tests__/getResultHeader.test.js +``` +✅ should call `terminal-link` correctly +✅ should render the terminal link +✅ should display test time for slow test +✅ should not display test time for fast test +``` +### ✅ packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js +``` +✅ Retrieves the snapshot status +✅ Shows no snapshot updates if all snapshots matched +✅ Retrieves the snapshot status after a snapshot update +``` +### ✅ packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js +``` +✅ creates a snapshot summary +✅ creates a snapshot summary after an update +✅ creates a snapshot summary with multiple snapshot being written/updated +✅ returns nothing if there are no updates +``` +### ✅ packages/jest-reporters/src/__tests__/getWatermarks.test.ts +``` +getWatermarks + ✅ that watermarks use thresholds as upper target + ✅ that watermarks are created always created +``` +### ✅ packages/jest-reporters/src/__tests__/NotifyReporter.test.ts +``` +✅ test always +✅ test success +✅ test change +✅ test success-change +✅ test failure-change +✅ test always with rootDir +✅ test success with rootDir +✅ test change with rootDir +✅ test success-change with rootDir +✅ test failure-change with rootDir +✅ test always with moduleName +✅ test success with moduleName +✅ test change with moduleName +✅ test success-change with moduleName +✅ test failure-change with moduleName +node-notifier is an optional dependency + ✅ without node-notifier uses mock function that throws an error + ✅ throws the error when require throws an unexpected error + ✅ uses node-notifier when it is available +``` +### ✅ packages/jest-reporters/src/__tests__/SummaryReporter.test.js +``` +✅ snapshots needs update with npm test +✅ snapshots needs update with yarn test +✅ snapshots all have results (no update) +✅ snapshots all have results (after update) +``` +### ✅ packages/jest-reporters/src/__tests__/utils.test.ts +``` +wrapAnsiString() + ✅ wraps a long string containing ansi chars + ✅ returns the string unaltered if given a terminal width of zero +trimAndFormatPath() + ✅ trims dirname + ✅ trims dirname (longer line width) + ✅ trims dirname and basename + ✅ does not trim anything + ✅ split at the path.sep index +printDisplayName + ✅ should default displayName color to white when displayName is a string + ✅ should default displayName color to white when color is not a valid value + ✅ should correctly print the displayName when color and name are valid values +``` +### ✅ packages/jest-reporters/src/__tests__/VerboseReporter.test.js +``` +groupTestsBySuites + ✅ should handle empty results + ✅ should group A1 in A + ✅ should group A1 in A; B1 in B + ✅ should group A1, A2 in A + ✅ should group A1, A2 in A; B1, B2 in B + ✅ should group AB1 in AB + ✅ should group AB1, AB2 in AB + ✅ should group A1 in A; AB1 in AB + ✅ should group AB1 in AB; A1 in A + ✅ should group AB1 in AB; CD1 in CD + ✅ should group ABC1 in ABC; BC1 in BC; D1 in D; A1 in A +``` +### ✅ packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts +``` +✅ resolves no dependencies for non-existent path +✅ resolves dependencies for existing path +✅ includes the mocks of dependencies as dependencies +✅ resolves dependencies for scoped packages +✅ resolves no inverse dependencies for empty paths set +✅ resolves no inverse dependencies for set of non-existent paths +✅ resolves inverse dependencies for existing path +✅ resolves inverse dependencies of mock +✅ resolves inverse dependencies from available snapshot +✅ resolves dependencies correctly when dependency resolution fails +✅ resolves dependencies correctly when mock dependency resolution fails +``` +### ✅ packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts +``` +isBuiltinModule + ✅ should return true for the `path` module + ✅ should return false for the `chalk` module + ✅ should return true for the `_http_common` module + ✅ should return false for any internal node builtins +``` +### ✅ packages/jest-resolve/src/__tests__/resolve.test.ts +``` +isCoreModule + ✅ returns false if `hasCoreModules` is false. + ✅ returns true if `hasCoreModules` is true and `moduleName` is a core module. + ✅ returns false if `hasCoreModules` is true and `moduleName` is not a core module. + ✅ returns false if `hasCoreModules` is true and `moduleNameMapper` alias a module same name with core module +findNodeModule + ✅ is possible to override the default resolver + ✅ passes packageFilter to the resolve module when using the default resolver +resolveModule + ✅ is possible to resolve node modules + ✅ is possible to resolve node modules with custom extensions + ✅ is possible to resolve node modules with custom extensions and platforms + ✅ is possible to resolve node modules by resolving their realpath + ✅ is possible to specify custom resolve paths + ✅ does not confuse directories with files +getMockModule + ✅ is possible to use custom resolver to resolve deps inside mock modules with moduleNameMapper +nodeModulesPaths + ✅ provides custom module paths after node_modules +Resolver.getModulePaths() -> nodeModulesPaths() + ✅ can resolve node modules relative to absolute paths in "moduleDirectories" on Windows platforms + ✅ can resolve node modules relative to absolute paths in "moduleDirectories" on Posix platforms +``` +### ✅ packages/jest-runner/src/__tests__/testRunner.test.ts +``` +✅ injects the serializable module map into each worker in watch mode +✅ assign process.env.JEST_WORKER_ID = 1 when in runInBand mode +``` +### ✅ packages/jest-runtime/src/__tests__/instrumentation.test.ts +``` +✅ instruments files +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js +``` +Runtime createMockFromModule + ✅ does not cause side effects in the rest of the module system when generating a mock + ✅ resolves mapped modules correctly +Runtime + ✅ creates mock objects in the right environment +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_environment.test.js +``` +Runtime requireModule + ✅ emulates a node stack trace during module load + ✅ emulates a node stack trace during function execution +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_internal_module.test.js +``` +Runtime internalModule + ✅ loads modules and applies transforms + ✅ loads internal modules without applying transforms + ✅ loads JSON modules and applies transforms + ✅ loads internal JSON modules without applying transforms +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_jest_fn.js +``` +Runtime jest.fn + ✅ creates mock functions + ✅ creates mock functions with mock implementations +Runtime jest.isMockFunction + ✅ recognizes a mocked function +Runtime jest.clearAllMocks + ✅ clears all mocks +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js +``` +Runtime jest.spyOn + ✅ calls the original function +Runtime jest.spyOnProperty + ✅ calls the original function +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_mock.test.js +``` +Runtime jest.mock + ✅ uses explicitly set mocks instead of automocking + ✅ sets virtual mock for non-existing module required from same directory + ✅ sets virtual mock for non-existing module required from different directory +Runtime jest.setMock + ✅ uses explicitly set mocks instead of automocking +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_module_directories.test.js +``` +Runtime + ✅ uses configured moduleDirectories + ✅ resolves packages + ✅ finds closest module from moduleDirectories + ✅ only checks the configured directories +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_node_path.test.js +``` +Runtime + ✅ uses NODE_PATH to find modules + ✅ uses modulePaths to find modules + ✅ finds modules in NODE_PATH containing multiple paths + ✅ does not find modules if NODE_PATH is relative +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_actual.test.js +``` +Runtime requireActual + ✅ requires node module when manual mock exists + ✅ requireActual with moduleNameMapper +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_cache.test.js +``` +Runtime require.cache + ✅ require.cache returns loaded module list as native Nodejs require does + ✅ require.cache is tolerant readonly +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_mock.test.js +``` +Runtime requireMock + ✅ uses manual mocks before attempting to automock + ✅ can resolve modules that are only referenced from mocks + ✅ stores and re-uses manual mock exports + ✅ automocks haste modules without a manual mock + ✅ automocks relative-path modules without a file extension + ✅ automocks relative-path modules with a file extension + ✅ just falls back when loading a native module + ✅ stores and re-uses automocked haste exports + ✅ stores and re-uses automocked relative-path modules + ✅ multiple node core modules returns correct module + ✅ throws on non-existent haste modules + ✅ uses manual mocks when using a custom resolver + ✅ provides `require.main` in mock +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js +``` +Runtime requireModule with no extension + ✅ throws error pointing out file with extension +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js +``` +transitive dependencies + ✅ mocks a manually mocked and mapped module + ✅ unmocks transitive dependencies in node_modules by default + ✅ unmocks transitive dependencies in node_modules when using unmock + ✅ unmocks transitive dependencies in node_modules by default when using both patterns and unmock + ✅ mocks deep dependencies when using unmock + ✅ does not mock deep dependencies when using deepUnmock +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js +``` +✅ mocks modules by default when using automocking +✅ doesn't mock modules when explicitly unmocked when using automocking +✅ doesn't mock modules when explicitly unmocked via a different name +✅ doesn't mock modules when disableAutomock() has been called +✅ uses manual mock when automocking on and mock is available +✅ does not use manual mock when automocking is off and a real module is available +✅ resolves mapped module names and unmocks them by default +✅ automocking is disabled by default +✅ unmocks modules in config.unmockedModulePathPatterns for tests with automock enabled when automock is false +✅ unmocks virtual mocks after they have been mocked previously +resetModules + ✅ resets all the modules +isolateModules + ✅ keeps it's registry isolated from global one + ✅ resets all modules after the block + ✅ resets module after failing + ✅ cannot nest isolateModules blocks + ✅ can call resetModules within a isolateModules block +isolateModules can use isolateModules from a beforeEach block + ✅ can use the required module from beforeEach and re-require it +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module.test.js +``` +Runtime requireModule + ✅ finds haste modules + ✅ provides `module` to modules + ✅ provides `module.parent` to modules + ✅ `module.parent` should be undefined for entrypoints + ✅ resolve module.parent.require correctly + ✅ resolve module.parent.filename correctly + ✅ provides `module.loaded` to modules + ✅ provides `module.filename` to modules + ✅ provides `module.paths` to modules + ✅ provides `require.main` to modules + ✅ throws on non-existent haste modules + ✅ finds relative-path modules without file extension + ✅ finds relative-path modules with file extension + ✅ throws on non-existent relative-path modules + ✅ finds node core built-in modules + ✅ finds and loads JSON files without file extension + ✅ finds and loads JSON files with file extension + ✅ requires a JSON file twice successfully + ✅ provides manual mock when real module doesnt exist + ✅ doesn't override real modules with manual mocks when explicitly unmocked + ✅ resolves haste packages properly + ✅ resolves platform extensions based on the default platform + ✅ finds modules encoded in UTF-8 *with BOM* + ✅ finds and loads JSON files encoded in UTF-8 *with BOM* + ✅ should export a constructable Module class + ✅ caches Module correctly +Runtime requireModule on node >=12.12.0 + ✅ overrides module.createRequire +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts +``` +Runtime require.resolve + ✅ resolves a module path + ✅ resolves a module path with moduleNameMapper +Runtime require.resolve with the jest-resolve-outside-vm-option + ✅ forwards to the real Node require in an internal context + ✅ ignores the option in an external context + ✅ does not understand a self-constructed outsideJestVmPath in an external context +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_wrap.js +``` +Runtime wrapCodeInModuleWrapper + ✅ generates the correct args for the module wrapper + ✅ injects "extra globals" +``` +### ✅ packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js +``` +Runtime requireModule + ✅ installs source maps if available +``` +### ✅ packages/jest-runtime/src/__tests__/Runtime-statics.test.js +``` +Runtime statics + ✅ Runtime.createHasteMap passes correct ignore files to HasteMap + ✅ Runtime.createHasteMap passes correct ignore files to HasteMap in watch mode +``` +### ✅ packages/jest-serializer/src/__tests__/index.test.ts +``` +Using V8 implementation + ✅ throws the error with an invalid serialization +Using V8 implementation Object 0 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 1 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 2 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 3 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 4 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 5 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 6 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 7 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +``` +### ✅ packages/jest-snapshot/src/__tests__/dedentLines.test.ts +``` +dedentLines non-null + ✅ no lines + ✅ one line empty string + ✅ one line empty object + ✅ one line self-closing element + ✅ object value empty string + ✅ object value string includes double-quote marks + ✅ markup with props and text + ✅ markup with components as props +dedentLines null + ✅ object key multi-line + ✅ object value multi-line + ✅ object key and value multi-line + ✅ markup prop multi-line + ✅ markup prop component with multi-line text + ✅ markup text multi-line + ✅ markup text multiple lines + ✅ markup unclosed self-closing start tag + ✅ markup unclosed because no end tag +``` +### ✅ packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +``` +✅ saveInlineSnapshots() replaces empty function call with a template literal +✅ saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone +✅ saveInlineSnapshots() can handle typescript without prettier +✅ saveInlineSnapshots() can handle tsx without prettier +✅ saveInlineSnapshots() can handle flow and jsx without prettier +✅ saveInlineSnapshots() can use prettier to fix formatting for whole file +✅ saveInlineSnapshots() replaces existing template literal - babel parser +✅ saveInlineSnapshots() replaces existing template literal - flow parser +✅ saveInlineSnapshots() replaces existing template literal - typescript parser +✅ saveInlineSnapshots() replaces existing template literal with property matchers +✅ saveInlineSnapshots() creates template literal with property matchers +✅ saveInlineSnapshots() creates template literal with property matchers +✅ saveInlineSnapshots() throws if frame does not match +✅ saveInlineSnapshots() throws if multiple calls to to the same location +✅ saveInlineSnapshots() uses escaped backticks +✅ saveInlineSnapshots() works with non-literals in expect call +✅ saveInlineSnapshots() indents multi-line snapshots with spaces +✅ saveInlineSnapshots() does not re-indent error snapshots +✅ saveInlineSnapshots() does not re-indent already indented snapshots +✅ saveInlineSnapshots() indents multi-line snapshots with tabs +✅ saveInlineSnapshots() indents snapshots after prettier reformats +✅ saveInlineSnapshots() does not indent empty lines +``` +### ✅ packages/jest-snapshot/src/__tests__/matcher.test.ts +``` +✅ matcher returns matcher name, expected and actual values +``` +### ✅ packages/jest-snapshot/src/__tests__/mockSerializer.test.ts +``` +✅ mock with 0 calls and default name +✅ mock with 2 calls, 1 return, 1 throw +✅ mock with 0 calls and default name in React element +✅ mock with 0 calls and non-default name +✅ mock with 1 calls and non-default name via new in object +✅ mock with 1 calls in React element +✅ mock with 2 calls +✅ indent option +✅ min option +✅ maxDepth option +``` +### ✅ packages/jest-snapshot/src/__tests__/printSnapshot.test.ts +``` +chalk + ✅ level 0 + ✅ level 1 + ✅ level 2 + ✅ level 3 +matcher error toMatchInlineSnapshot + ✅ Expected properties must be an object (non-null) without snapshot + ✅ Expected properties must be an object (null) with snapshot + ✅ Inline snapshot must be a string + ✅ Snapshot matchers cannot be used with not +matcher error toMatchSnapshot + ✅ Expected properties must be an object (non-null) + ✅ Expected properties must be an object (null) with hint + ✅ Expected properties must be an object (null) without hint + ✅ Snapshot state must be initialized +matcher error toMatchSnapshot received value must be an object + ✅ (non-null) + ✅ (null) +matcher error toThrowErrorMatchingInlineSnapshot + ✅ Inline snapshot must be a string + ✅ Snapshot state must be initialized +matcher error toThrowErrorMatchingSnapshot + ✅ Received value must be a function + ✅ Snapshot matchers cannot be used with not +other error toThrowErrorMatchingSnapshot + ✅ Received function did not throw +pass false toMatchInlineSnapshot with properties equals false + ✅ with snapshot + ✅ without snapshot +pass false toMatchInlineSnapshot with properties + ✅ equals true +pass false toMatchSnapshot + ✅ New snapshot was not written (multi line) + ✅ New snapshot was not written (single line) +pass false toMatchSnapshot with properties equals false + ✅ isLineDiffable false + ✅ isLineDiffable true +pass false toMatchSnapshot with properties + ✅ equals true +pass false toThrowErrorMatchingInlineSnapshot + ✅ with snapshot +pass true toMatchSnapshot + ✅ without properties +printPropertiesAndReceived + ✅ omit missing properties +printSnapshotAndReceived backtick + ✅ single line expected and received +printSnapshotAndReceived empty string + ✅ expected and received single line + ✅ received and expected multi line +printSnapshotAndReceived escape + ✅ double quote marks in string + ✅ backslash in multi line string + ✅ backslash in single line string + ✅ regexp +printSnapshotAndReceived expand + ✅ false + ✅ true +printSnapshotAndReceived + ✅ fallback to line diff + ✅ multi line small change in one line and other is unchanged + ✅ multi line small changes + ✅ single line large changes +printSnapshotAndReceived has no common after clean up chaff + ✅ array + ✅ string single line +printSnapshotAndReceived MAX_DIFF_STRING_LENGTH unquoted + ✅ both are less + ✅ expected is more + ✅ received is more +printSnapshotAndReceived MAX_DIFF_STRING_LENGTH quoted + ✅ both are less + ✅ expected is more + ✅ received is more +printSnapshotAndReceived isLineDiffable false + ✅ asymmetric matcher + ✅ boolean + ✅ date + ✅ error + ✅ function + ✅ number +printSnapshotAndReceived isLineDiffable true + ✅ array + ✅ object + ✅ single line expected and received + ✅ single line expected and multi line received +printSnapshotAndReceived ignore indentation + ✅ markup delete + ✅ markup fall back + ✅ markup insert +printSnapshotAndReceived ignore indentation object + ✅ delete + ✅ insert +printSnapshotAndReceived without serialize + ✅ backtick single line expected and received + ✅ backtick single line expected and multi line received + ✅ has no common after clean up chaff multi line + ✅ has no common after clean up chaff single line + ✅ prettier/pull/5590 +``` +### ✅ packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts +``` +defaults + ✅ returns cached object if called multiple times + ✅ resolveSnapshotPath() + ✅ resolveTestPath() +custom resolver in project config + ✅ returns cached object if called multiple times + ✅ resolveSnapshotPath() + ✅ resolveTestPath() +malformed custom resolver in project config + ✅ missing resolveSnapshotPath throws + ✅ missing resolveTestPath throws + ✅ missing testPathForConsistencyCheck throws + ✅ inconsistent functions throws +``` +### ✅ packages/jest-snapshot/src/__tests__/throwMatcher.test.ts +``` +✅ throw matcher can take func +throw matcher from promise + ✅ can take error + ✅ can take custom error +``` +### ✅ packages/jest-snapshot/src/__tests__/utils.test.ts +``` +✅ keyToTestName() +✅ testNameToKey +✅ saveSnapshotFile() works with +✅ saveSnapshotFile() works with +✅ getSnapshotData() throws when no snapshot version +✅ getSnapshotData() throws for older snapshot version +✅ getSnapshotData() throws for newer snapshot version +✅ getSnapshotData() does not throw for when updating +✅ getSnapshotData() marks invalid snapshot dirty when updating +✅ getSnapshotData() marks valid snapshot not dirty when updating +✅ escaping +✅ serialize handles \r\n +ExtraLineBreaks + ✅ 0 empty string + ✅ 1 line has double quote marks at edges + ✅ 1 line has spaces at edges + ✅ 2 lines both are blank + ✅ 2 lines have double quote marks at edges + ✅ 2 lines first is blank + ✅ 2 lines last is blank +removeLinesBeforeExternalMatcherTrap + ✅ contains external matcher trap + ✅ doesn't contain external matcher trap +DeepMerge with property matchers + ✅ Correctly merges a nested object + ✅ Correctly merges an object with an array of objects + ✅ Correctly merges an object with an array of strings + ✅ Correctly merges an array of objects + ✅ Correctly merges an array of arrays +``` +### ✅ packages/jest-source-map/src/__tests__/getCallsite.test.ts +``` +getCallsite + ✅ without source map + ✅ ignores errors when fs throws + ✅ reads source map file to determine line and column +``` +### ✅ packages/jest-test-result/src/__tests__/formatTestResults.test.ts +``` +formatTestResults + ✅ includes test full name +``` +### ✅ packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js +``` +✅ sorts by file size if there is no timing information +✅ sorts based on timing information +✅ sorts based on failures and timing information +✅ sorts based on failures, timing information and file size +✅ writes the cache based on results without existing cache +✅ returns failed tests in sorted order +✅ writes the cache based on the results +✅ works with multiple contexts +``` +### ✅ packages/jest-transform/src/__tests__/ScriptTransformer.test.ts +``` +ScriptTransformer + ✅ transforms a file properly + ✅ does not transform Node core modules + ✅ throws an error if `process` doesn't return a string or an objectcontaining `code` key with processed string + ✅ throws an error if `process` doesn't defined + ✅ throws an error if createTransformer returns object without `process` method + ✅ shouldn't throw error without process method. But with corrent createTransformer method + ✅ uses the supplied preprocessor + ✅ uses multiple preprocessors + ✅ writes source map if preprocessor supplies it + ✅ writes source map if preprocessor inlines it + ✅ warns of unparseable inlined source maps from the preprocessor + ✅ writes source maps if given by the transformer + ✅ does not write source map if not given by the transformer + ✅ should write a source map for the instrumented file when transformed + ✅ should write a source map for the instrumented file when not transformed + ✅ passes expected transform options to getCacheKey + ✅ creates transformer with config + ✅ reads values from the cache + ✅ reads values from the cache when the file contains colons + ✅ should reuse the value from in-memory cache which is set by custom transformer + ✅ does not reuse the in-memory cache between different projects + ✅ preload transformer when using `preloadTransformer` +``` +### ✅ packages/jest-transform/src/__tests__/shouldInstrument.test.ts +``` +shouldInstrument should return true + ✅ when testRegex is provided and file is not a test file + ✅ when more than one testRegex is provided and filename is not a test file + ✅ when testMatch is provided and file is not a test file + ✅ when testPathIgnorePatterns is provided and file is not a test file + ✅ when more than one testPathIgnorePatterns is provided and filename is not a test file + ✅ when testRegex and testPathIgnorePatterns are provided and file is not a test file + ✅ when testMatch and testPathIgnorePatterns are provided and file is not a test file + ✅ should return true when file is in collectCoverageOnlyFrom when provided + ✅ should return true when filename matches collectCoverageFrom + ✅ should return true if the file is not in coveragePathIgnorePatterns + ✅ should return true if file is a testfile but forceCoverageMatch is set +shouldInstrument should return false + ✅ if collectCoverage is falsy + ✅ when testRegex is provided and filename is a test file + ✅ when more than one testRegex is provided and filename matches one of the patterns + ✅ when testMatch is provided and file is a test file + ✅ when testRegex and testPathIgnorePatterns are provided and filename is a test file + ✅ when testMatch and testPathIgnorePatterns are provided and file is a test file + ✅ when file is not in collectCoverageOnlyFrom when provided + ✅ when filename does not match collectCoverageFrom + ✅ if the file is in coveragePathIgnorePatterns + ✅ if file is in mock patterns + ✅ if file is a globalSetup file + ✅ if file is globalTeardown file + ✅ if file is in setupFiles + ✅ if file is in setupFilesAfterEnv +``` +### ✅ packages/jest-util/src/__tests__/createProcessObject.test.ts +``` +✅ creates a process object that looks like the original one +✅ fakes require("process") so it is equal to "global.process" +✅ checks that process.env works as expected on Linux platforms +✅ checks that process.env works as expected in Windows platforms +``` +### ✅ packages/jest-util/src/__tests__/deepCyclicCopy.test.ts +``` +✅ returns the same value for primitive or function values +✅ does not execute getters/setters, but copies them +✅ copies symbols +✅ copies arrays as array objects +✅ handles cyclic dependencies +✅ uses the blacklist to avoid copying properties on the first level +✅ does not keep the prototype by default when top level is object +✅ does not keep the prototype by default when top level is array +✅ does not keep the prototype of arrays when keepPrototype = false +✅ keeps the prototype of arrays when keepPrototype = true +✅ does not keep the prototype for objects when keepPrototype = false +✅ keeps the prototype for objects when keepPrototype = true +``` +### ✅ packages/jest-util/src/__tests__/errorWithStack.test.ts +``` +ErrorWithStack + ✅ calls Error.captureStackTrace with given callsite when capture exists +``` +### ✅ packages/jest-util/src/__tests__/formatTime.test.ts +``` +✅ defaults to milliseconds +✅ formats seconds properly +✅ formats milliseconds properly +✅ formats microseconds properly +✅ formats nanoseconds properly +✅ interprets lower than lowest powers as nanoseconds +✅ interprets higher than highest powers as seconds +✅ interprets non-multiple-of-3 powers as next higher prefix +✅ formats the quantity properly when pad length is lower +✅ formats the quantity properly when pad length is equal +✅ left pads the quantity properly when pad length is higher +``` +### ✅ packages/jest-util/src/__tests__/globsToMatcher.test.ts +``` +✅ works like micromatch with only positive globs +✅ works like micromatch with a mix of overlapping positive and negative globs +✅ works like micromatch with only negative globs +✅ works like micromatch with empty globs +``` +### ✅ packages/jest-util/src/__tests__/installCommonGlobals.test.ts +``` +✅ returns the passed object +✅ turns a V8 global object into a Node global object +``` +### ✅ packages/jest-util/src/__tests__/isInteractive.test.ts +``` +✅ Returns true when running on interactive environment +✅ Returns false when running on a non-interactive environment +``` +### ✅ packages/jest-util/src/__tests__/isPromise.test.ts +``` +not a Promise: + ✅ undefined + ✅ null + ✅ true + ✅ 42 + ✅ "1337" + ✅ Symbol() + ✅ [] + ✅ {} +✅ a resolved Promise +✅ a rejected Promise +``` +### ✅ packages/jest-validate/src/__tests__/validate.test.ts +``` +✅ recursively validates default Jest config +✅ recursively validates default jest-validate config +✅ pretty prints valid config for Boolean +✅ pretty prints valid config for Array +✅ pretty prints valid config for String +✅ pretty prints valid config for Object +✅ pretty prints valid config for Function +✅ omits null and undefined config values +✅ recursively omits null and undefined config values +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ respects recursiveDenylist +✅ displays warning for unknown config options +✅ displays warning for deprecated config options +✅ works with custom warnings +✅ works with custom errors +✅ works with custom deprecations +✅ works with multiple valid types +✅ reports errors nicely when failing with multiple valid options +✅ Repeated types within multiple valid examples are coalesced in error report +✅ Comments in config JSON using "//" key are not warned +``` +### ✅ packages/jest-validate/src/__tests__/validateCLIOptions.test.js +``` +✅ validates yargs special options +✅ validates testURL +✅ fails for unknown option +✅ fails for multiple unknown options +✅ does not show suggestion when unrecognized cli param length <= 1 +✅ shows suggestion when unrecognized cli param length > 1 +``` +### ✅ packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts +``` +for multiline test name returns + ✅ test name with highlighted pattern and replaced line breaks +for one line test name with pattern in the head returns + ✅ test name with highlighted pattern + ✅ test name with cutted tail and highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern +for one line test name pattern in the middle + ✅ test name with highlighted pattern returns + ✅ test name with cutted tail and highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern + ✅ test name with highlighted cutted +for one line test name pattern in the tail returns + ✅ test name with highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern + ✅ test name with highlighted cutted +``` +### ✅ packages/jest-watcher/src/lib/__tests__/prompt.test.ts +``` +✅ calls handler on change value +✅ calls handler on success prompt +✅ calls handler on cancel prompt +``` +### ✅ packages/jest-watcher/src/lib/__tests__/scroll.test.ts +``` +✅ When offset is -1 +✅ When offset is in the first set of items +✅ When offset is in the middle of the list +✅ When offset is at the end of the list +✅ When offset is at the end and size is smaller than max +``` +### ✅ packages/jest-worker/src/__tests__/Farm.test.js +``` +Farm + ✅ sends a request to one worker + ✅ sends four requests to four unique workers + ✅ handles null computeWorkerKey, sending to first worker + ✅ sends the same worker key to the same worker + ✅ returns the result if the call worked + ✅ throws if the call failed + ✅ checks that once a sticked task finishes, next time is sent to that worker + ✅ checks that even before a sticked task finishes, next time is sent to that worker + ✅ checks that locking works, and jobs are never lost + ✅ can receive custom messages from workers +``` +### ✅ packages/jest-worker/src/__tests__/FifoQueue.test.js +``` +✅ returns the shared tasks in FIFO ordering +✅ returns the worker specific tasks in FIFO ordering +✅ maintains global FIFO ordering between worker specific and shared tasks +``` +### ✅ packages/jest-worker/src/__tests__/index.test.js +``` +✅ exposes the right API using default working +✅ exposes the right API using passed worker +✅ breaks if any of the forbidden methods is tried to be exposed +✅ works with minimal options +✅ does not let make calls after the farm is ended +✅ does not let end the farm after it is ended +✅ calls doWork +✅ calls getStderr and getStdout from worker +``` +### ✅ packages/jest-worker/src/__tests__/PriorityQueue.test.js +``` +✅ returns the tasks in order +✅ returns the task with the lowest priority value if inserted in reversed order +✅ returns the task with the lowest priority value if inserted in correct order +✅ uses different queues for each worker +✅ process task in the global and shared queue in order +``` +### ✅ packages/jest-worker/src/__tests__/process-integration.test.js +``` +Jest Worker Integration + ✅ calls a single method from the worker + ✅ distributes sequential calls across child processes + ✅ schedules the task on the first available child processes if the scheduling policy is in-order + ✅ distributes concurrent calls across child processes + ✅ sticks parallel calls to children +``` +### ✅ packages/jest-worker/src/__tests__/thread-integration.test.js +``` +Jest Worker Process Integration + ✅ calls a single method from the worker + ✅ distributes sequential calls across child processes + ✅ schedules the task on the first available child processes if the scheduling policy is in-order + ✅ schedules the task on the first available child processes + ✅ distributes concurrent calls across child processes + ✅ sticks parallel calls to children +``` +### ✅ packages/jest-worker/src/__tests__/WorkerPool.test.js +``` +WorkerPool + ✅ should create a ChildProcessWorker and send to it + ✅ should create a NodeThreadWorker and send to it + ✅ should avoid NodeThreadWorker if not passed enableWorkerThreads +``` +### ✅ packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js +``` +BaseWorkerPool + ✅ throws error when createWorker is not defined + ✅ creates and exposes n workers + ✅ creates and expoeses n workers + ✅ creates workers with the right options + ✅ makes a non-existing relative worker throw + ✅ create multiple workers with unique worker ids + ✅ aggregates all stdouts and stderrs from all workers + ✅ works when stdout and stderr are not piped to the parent +BaseWorkerPool end + ✅ ends all workers + ✅ resolves with forceExited=false if workers exited gracefully + ✅ force exits workers that do not exit gracefully and resolves with forceExited=true +``` +### ✅ packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js +``` +✅ passes fork options down to child_process.fork, adding the defaults +✅ passes workerId to the child process and assign it to 1-indexed env.JEST_WORKER_ID +✅ initializes the child process with the given workerPath +✅ stops initializing the worker after the amount of retries is exceeded +✅ provides stdout and stderr from the child processes +✅ sends the task to the child process +✅ resends the task to the child process after a retry +✅ calls the onProcessStart method synchronously if the queue is empty +✅ can send multiple messages to parent +✅ creates error instances for known errors +✅ throws when the child process returns a strange message +✅ does not restart the child if it cleanly exited +✅ resolves waitForExit() after the child process cleanly exited +✅ restarts the child when the child process dies +✅ sends SIGTERM when forceExit() is called +✅ sends SIGKILL some time after SIGTERM +✅ does not send SIGKILL if SIGTERM exited the process +``` +### ✅ packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js +``` +✅ passes fork options down to child_process.fork, adding the defaults +✅ passes workerId to the thread and assign it to env.JEST_WORKER_ID +✅ initializes the thread with the given workerPath +✅ stops initializing the worker after the amount of retries is exceeded +✅ provides stdout and stderr from the threads +✅ sends the task to the thread +✅ resends the task to the thread after a retry +✅ calls the onProcessStart method synchronously if the queue is empty +✅ can send multiple messages to parent +✅ creates error instances for known errors +✅ throws when the thread returns a strange message +✅ does not restart the thread if it cleanly exited +✅ resolves waitForExit() after the thread cleanly exited +✅ restarts the thread when the thread dies +✅ terminates the thread when forceExit() is called +``` +### ✅ packages/jest-worker/src/workers/__tests__/processChild.test.js +``` +✅ lazily requires the file +✅ calls initialize with the correct arguments +✅ returns results immediately when function is synchronous +✅ returns results when it gets resolved if function is asynchronous +✅ calls the main module if the method call is "default" +✅ calls the main export if the method call is "default" and it is a Babel transpiled one +✅ removes the message listener on END message +✅ calls the teardown method +✅ throws if an invalid message is detected +✅ throws if child is not forked +``` +### ✅ packages/jest-worker/src/workers/__tests__/threadChild.test.js +``` +✅ lazily requires the file +✅ calls initialize with the correct arguments +✅ returns results immediately when function is synchronous +✅ returns results when it gets resolved if function is asynchronous +✅ calls the main module if the method call is "default" +✅ calls the main export if the method call is "default" and it is a Babel transpiled one +✅ removes the message listener on END message +✅ calls the teardown method +✅ throws if an invalid message is detected +✅ throws if child is not forked +``` +### ✅ packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts +``` +✅ supports any(String) +✅ supports nested any(String) +✅ supports any(Function) +✅ supports nested any(Function) +✅ supports any(Array) +✅ supports nested any(Array) +✅ supports any(Object) +✅ supports nested any(Object) +✅ supports any(RegExp) +✅ supports nested any(RegExp) +✅ supports any(Symbol) +✅ supports nested any(Symbol) +✅ supports any(Function) +✅ supports nested any(Function) +✅ supports any() +✅ supports nested any() +✅ supports any(namedFuntction) +✅ supports nested any(namedFuntction) +✅ anything() +✅ arrayContaining() +✅ arrayNotContaining() +✅ objectContaining() +✅ objectNotContaining() +✅ stringContaining(string) +✅ not.stringContaining(string) +✅ stringMatching(string) +✅ stringMatching(regexp) +✅ stringMatching(regexp) {escapeRegex: false} +✅ stringMatching(regexp) {escapeRegex: true} +✅ stringNotMatching(string) +✅ supports multiple nested asymmetric matchers +✅ min option +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ matchers as leaf nodes + ✅ matchers as internal nodes +``` +### ✅ packages/pretty-format/src/__tests__/ConvertAnsi.test.ts +``` +ConvertAnsi plugin + ✅ supports style.red + ✅ supports style.green + ✅ supports style.reset + ✅ supports style.bold + ✅ supports style.dim + ✅ does not support other colors +``` +### ✅ packages/pretty-format/src/__tests__/DOMCollection.test.ts +``` +DOMCollection plugin for object properties + ✅ supports DOMStringMap + ✅ supports NamedNodeMap + ✅ supports config.min option +DOMCollection plugin for list items + ✅ supports HTMLCollection for getElementsByTagName + ✅ supports HTMLCollection for children + ✅ supports config.maxDepth option + ✅ supports NodeList for querySelectorAll + ✅ supports NodeList for childNodes + ✅ supports HTMLOptionsCollection for select options + ✅ supports HTMLCollection for form elements +``` +### ✅ packages/pretty-format/src/__tests__/DOMElement.test.ts +``` +pretty-format + ✅ prints global window as constructor name alone +DOMElement Plugin + ✅ supports a single HTML element + ✅ supports an HTML element with a class property + ✅ supports an HTML element with a title property + ✅ escapes double quote in attribute value + ✅ supports an HTML element with a single attribute + ✅ supports an HTML element with multiple attributes + ✅ supports an HTML element with attribute and text content + ✅ supports an element with text content + ✅ supports nested elements + ✅ supports nested elements with attributes + ✅ supports nested elements with attribute and text content + ✅ supports nested elements with text content + ✅ supports siblings + ✅ supports multiline text node in pre + ✅ supports multiline text node preceding span in pre + ✅ supports multiline text node in textarea + ✅ supports empty text node + ✅ supports non-empty text node + ✅ supports comment node + ✅ supports fragment node + ✅ supports custom elements + ✅ supports SVG elements + ✅ supports indentation for array of elements + ✅ supports maxDepth option + ✅ handles `tagName` not being a string +DOMElement Plugin matches constructor name of SVG elements + ✅ jsdom 9 and 10 + ✅ jsdom 11 +``` +### ✅ packages/pretty-format/src/__tests__/Immutable.test.ts +``` +✅ does not incorrectly match identity-obj-proxy as Immutable object +Immutable.OrderedSet + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.List + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Stack + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Set + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Map + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports an object with single key + ✅ supports an object with multiple keys {min: true} + ✅ supports an object with multiple keys {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.OrderedMap + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports an object with single key + ✅ supports an object with multiple keys {min: true} + ✅ supports an object with multiple keys {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} + ✅ supports non-string keys +Immutable.Record + ✅ supports an empty record {min: true} + ✅ supports an empty record {min: false} + ✅ supports a record with descriptive name + ✅ supports a record without descriptive name + ✅ supports a record with values {min: true} + ✅ supports a record with values {min: false} + ✅ supports a record with Map value {min: true} + ✅ supports a record with Map value {min: false} + ✅ supports imbricated Record {min: true} + ✅ supports imbricated Record {min: false} +indentation of heterogeneous collections + ✅ empty Immutable.List as child of Object + ✅ empty Immutable.Map as child of Array + ✅ non-empty Array as child of Immutable.Map + ✅ non-empty Object as child of Immutable.List +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ Immutable.List as child of Object + ✅ Immutable.Map as child of Array + ✅ Immutable.Seq as child of Immutable.Map + ✅ Immutable.Map as descendants in immutable collection +Immutable.Seq + ✅ supports an empty sequence from array {min: true} + ✅ supports an empty sequence from array {min: false} + ✅ supports a non-empty sequence from array {min: true} + ✅ supports a non-empty sequence from array {min: false} + ✅ supports a non-empty sequence from arguments + ✅ supports an empty sequence from object {min: true} + ✅ supports an empty sequence from object {min: false} + ✅ supports a non-empty sequence from object {min: true} + ✅ supports a non-empty sequence from object {min: false} + ✅ supports a sequence of entries from Immutable.Map + ✅ supports a sequence of values from ECMAScript Set + ✅ supports a sequence of values from Immutable.List + ✅ supports a sequence of values from Immutable.Set + ✅ supports a sequence of values from Immutable.Stack +Immutable.Seq lazy entries + ✅ from object properties + ✅ from Immutable.Map entries +Immutable.Seq lazy values + ✅ from Immutable.Range + ✅ from iterator + ✅ from array items + ✅ from Immutable.List values + ✅ from ECMAScript Set values +``` +### ✅ packages/pretty-format/src/__tests__/prettyFormat.test.ts +``` +prettyFormat() + ✅ prints empty arguments + ✅ prints arguments + ✅ prints an empty array + ✅ prints an array with items + ✅ prints a empty typed array + ✅ prints a typed array with items + ✅ prints an array buffer + ✅ prints a nested array + ✅ prints true + ✅ prints false + ✅ prints an error + ✅ prints a typed error with a message + ✅ prints a function constructor + ✅ prints an anonymous callback function + ✅ prints an anonymous assigned function + ✅ prints a named function + ✅ prints a named generator function + ✅ can customize function names + ✅ prints Infinity + ✅ prints -Infinity + ✅ prints an empty map + ✅ prints a map with values + ✅ prints a map with non-string keys + ✅ prints NaN + ✅ prints null + ✅ prints a positive number + ✅ prints a negative number + ✅ prints zero + ✅ prints negative zero + ✅ prints a positive bigint + ✅ prints a negative bigint + ✅ prints zero bigint + ✅ prints negative zero bigint + ✅ prints a date + ✅ prints an invalid date + ✅ prints an empty object + ✅ prints an object with properties + ✅ prints an object with properties and symbols + ✅ prints an object without non-enumerable properties which have string key + ✅ prints an object without non-enumerable properties which have symbol key + ✅ prints an object with sorted properties + ✅ prints regular expressions from constructors + ✅ prints regular expressions from literals + ✅ prints regular expressions {escapeRegex: false} + ✅ prints regular expressions {escapeRegex: true} + ✅ escapes regular expressions nested inside object + ✅ prints an empty set + ✅ prints a set with values + ✅ prints a string + ✅ prints and escape a string + ✅ doesn't escape string with {excapeString: false} + ✅ prints a string with escapes + ✅ prints a multiline string + ✅ prints a multiline string as value of object property + ✅ prints a symbol + ✅ prints undefined + ✅ prints a WeakMap + ✅ prints a WeakSet + ✅ prints deeply nested objects + ✅ prints circular references + ✅ prints parallel references + ✅ can customize the max depth + ✅ throws on invalid options + ✅ supports plugins + ✅ supports plugins that return empty string + ✅ throws if plugin does not return a string + ✅ throws PrettyFormatPluginError if test throws an error + ✅ throws PrettyFormatPluginError if print throws an error + ✅ throws PrettyFormatPluginError if serialize throws an error + ✅ supports plugins with deeply nested arrays (#24) + ✅ should call plugins on nested basic values + ✅ prints objects with no constructor + ✅ prints identity-obj-proxy with string constructor + ✅ calls toJSON and prints its return value + ✅ calls toJSON and prints an internal representation. + ✅ calls toJSON only on functions + ✅ does not call toJSON recursively + ✅ calls toJSON on Sets + ✅ disables toJSON calls through options +prettyFormat() indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +prettyFormat() min + ✅ prints some basic values in min mode + ✅ prints some complex values in min mode + ✅ does not allow indent !== 0 in min mode +``` +### ✅ packages/pretty-format/src/__tests__/react.test.tsx +``` +✅ supports a single element with no props or children +✅ supports a single element with non-empty string child +✅ supports a single element with empty string child +✅ supports a single element with non-zero number child +✅ supports a single element with zero number child +✅ supports a single element with mixed children +✅ supports props with strings +✅ supports props with multiline strings +✅ supports props with numbers +✅ supports a single element with a function prop +✅ supports a single element with a object prop +✅ supports an element with and object prop and children +✅ supports an element with complex props and mixed children +✅ escapes children properly +✅ supports everything all together +✅ sorts props in nested components +✅ supports a single element with React elements as props +✅ supports a single element with React elements with props +✅ supports a single element with custom React elements with props +✅ supports a single element with custom React elements with props (using displayName) +✅ supports a single element with custom React elements with props (using anonymous function) +✅ supports a single element with custom React elements with a child +✅ supports undefined element type +✅ supports a fragment with no children +✅ supports a fragment with string child +✅ supports a fragment with element child +✅ supports suspense +✅ supports a single element with React elements with a child +✅ supports a single element with React elements with children +✅ supports a single element with React elements with array children +✅ supports array of elements +✅ min option +✅ ReactElement plugin highlights syntax +✅ ReactTestComponent plugin highlights syntax +✅ throws if theme option is null +✅ throws if theme option is not of type "object" +✅ throws if theme option has value that is undefined in ansi-styles +✅ ReactElement plugin highlights syntax with color from theme option +✅ ReactTestComponent plugin highlights syntax with color from theme option +✅ supports forwardRef with a child +✅ supports context Provider with a child +✅ supports context Consumer with a child +✅ ReactElement removes undefined props +✅ ReactTestComponent removes undefined props +test object for subset match + ✅ undefined props + ✅ undefined children +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ elements + ✅ array of elements +React.memo without displayName + ✅ renders the component name +React.memo with displayName + ✅ renders the displayName of component before memoizing + ✅ renders the displayName of memoized component +``` +### ✅ packages/pretty-format/src/__tests__/ReactElement.test.ts +``` +ReactElement Plugin + ✅ serializes forwardRef without displayName + ✅ serializes forwardRef with displayName + ✅ serializes forwardRef component with displayName ``` \ No newline at end of file diff --git a/__tests__/dart-json.test.ts b/__tests__/dart-json.test.ts index a2b959c..12b664b 100644 --- a/__tests__/dart-json.test.ts +++ b/__tests__/dart-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DartJsonParser} from '../src/parsers/dart-json/dart-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dart-json tests', () => { @@ -66,4 +66,66 @@ describe('dart-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/dotnet-nunit.test.ts b/__tests__/dotnet-nunit.test.ts index e0b4778..6903c5a 100644 --- a/__tests__/dotnet-nunit.test.ts +++ b/__tests__/dotnet-nunit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DotnetNunitParser} from '../src/parsers/dotnet-nunit/dotnet-nunit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dotnet-nunit tests', () => { @@ -26,4 +26,66 @@ describe('dotnet-nunit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index 498abcb..e7f83ee 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DotnetTrxParser} from '../src/parsers/dotnet-trx/dotnet-trx-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dotnet-trx tests', () => { @@ -99,4 +99,66 @@ describe('dotnet-trx tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/java-junit.test.ts b/__tests__/java-junit.test.ts index b70fd21..83a7dec 100644 --- a/__tests__/java-junit.test.ts +++ b/__tests__/java-junit.test.ts @@ -3,20 +3,10 @@ import * as path from 'path' import {JavaJunitParser} from '../src/parsers/java-junit/java-junit-parser' import {ParseOptions} from '../src/test-parser' -import {ReportOptions, getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('java-junit tests', () => { - const reportOpts: ReportOptions = { - listSuites: 'all', - listTests: 'all', - baseUrl: '', - onlySummary: false, - useActionsSummary: true, - badgeTitle: 'tests', - reportTitle: '' - } - it('produces empty test run result when there are no test cases', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) @@ -136,7 +126,7 @@ describe('java-junit tests', () => { const parser = new JavaJunitParser(opts) const result = await parser.parse(filePath, fileContent) const report = getReport([result], { - ...reportOpts, + ...DEFAULT_OPTIONS, reportTitle }) // Report should have the badge as the first line @@ -155,16 +145,10 @@ describe('java-junit tests', () => { const parser = new JavaJunitParser(opts) const result = await parser.parse(filePath, fileContent) - const reportOpts: ReportOptions = { - listSuites: 'all', - listTests: 'all', - baseUrl: '', - onlySummary: false, - useActionsSummary: true, - badgeTitle: 'tests', + const report = getReport([result], { + ...DEFAULT_OPTIONS, reportTitle: 'My Custom Title' - } - const report = getReport([result], reportOpts) + }) // Report should have the title as the first line expect(report).toMatch(/^# My Custom Title\n/) }) diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts index d52c047..f4b8335 100644 --- a/__tests__/jest-junit.test.ts +++ b/__tests__/jest-junit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {JestJunitParser} from '../src/parsers/jest-junit/jest-junit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('jest-junit tests', () => { @@ -145,4 +145,66 @@ describe('jest-junit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/mocha-json.test.ts b/__tests__/mocha-json.test.ts index 05393fa..1272962 100644 --- a/__tests__/mocha-json.test.ts +++ b/__tests__/mocha-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {MochaJsonParser} from '../src/parsers/mocha-json/mocha-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('mocha-json tests', () => { @@ -64,4 +64,66 @@ describe('mocha-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/rspec-json.test.ts b/__tests__/rspec-json.test.ts index f77475a..787420b 100644 --- a/__tests__/rspec-json.test.ts +++ b/__tests__/rspec-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {RspecJsonParser} from '../src/parsers/rspec-json/rspec-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('rspec-json tests', () => { @@ -42,4 +42,66 @@ describe('rspec-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/swift-xunit.test.ts b/__tests__/swift-xunit.test.ts index 474c868..9f063ee 100644 --- a/__tests__/swift-xunit.test.ts +++ b/__tests__/swift-xunit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {SwiftXunitParser} from '../src/parsers/swift-xunit/swift-xunit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('swift-xunit tests', () => { @@ -27,4 +27,66 @@ describe('swift-xunit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/dist/index.js b/dist/index.js index 5a53d66..26cc77d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1803,6 +1803,7 @@ var __importStar = (this && this.__importStar) || (function () { }; })(); Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DEFAULT_OPTIONS = void 0; exports.getReport = getReport; const core = __importStar(__nccwpck_require__(7484)); const markdown_utils_1 = __nccwpck_require__(5129); @@ -1811,7 +1812,7 @@ const parse_utils_1 = __nccwpck_require__(9633); const slugger_1 = __nccwpck_require__(9537); const MAX_REPORT_LENGTH = 65535; const MAX_ACTIONS_SUMMARY_LENGTH = 1048576; -const defaultOptions = { +exports.DEFAULT_OPTIONS = { listSuites: 'all', listTests: 'all', baseUrl: '', @@ -1820,7 +1821,7 @@ const defaultOptions = { badgeTitle: 'tests', reportTitle: '' }; -function getReport(results, options = defaultOptions) { +function getReport(results, options = exports.DEFAULT_OPTIONS) { core.info('Generating check run summary'); applySort(results); const opts = { ...options }; @@ -1841,7 +1842,7 @@ function getReport(results, options = defaultOptions) { core.warning(`Test report summary exceeded limit of ${getMaxReportLength(options)} bytes and will be trimmed`); return trimReport(lines, options); } -function getMaxReportLength(options = defaultOptions) { +function getMaxReportLength(options = exports.DEFAULT_OPTIONS) { return options.useActionsSummary ? MAX_ACTIONS_SUMMARY_LENGTH : MAX_REPORT_LENGTH; } function trimReport(lines, options) { diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 1ed6656..a3385e9 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -18,7 +18,7 @@ export interface ReportOptions { reportTitle: string } -const defaultOptions: ReportOptions = { +export const DEFAULT_OPTIONS: ReportOptions = { listSuites: 'all', listTests: 'all', baseUrl: '', @@ -28,7 +28,7 @@ const defaultOptions: ReportOptions = { reportTitle: '' } -export function getReport(results: TestRunResult[], options: ReportOptions = defaultOptions): string { +export function getReport(results: TestRunResult[], options: ReportOptions = DEFAULT_OPTIONS): string { core.info('Generating check run summary') applySort(results) @@ -55,7 +55,7 @@ export function getReport(results: TestRunResult[], options: ReportOptions = def return trimReport(lines, options) } -function getMaxReportLength(options: ReportOptions = defaultOptions): number { +function getMaxReportLength(options: ReportOptions = DEFAULT_OPTIONS): number { return options.useActionsSummary ? MAX_ACTIONS_SUMMARY_LENGTH : MAX_REPORT_LENGTH }