From ae5325e432dca21fe4e5447d25004e04eb8d2dcb Mon Sep 17 00:00:00 2001 From: Quinn Slack Date: Sun, 5 Nov 2023 21:57:04 -1000 Subject: [PATCH] switch from jest to vitest for faster, simpler tests (#57886) Replaces our usage of jest with vitest. Also removes the babel transpiler. This simplifies our test configuration by a lot, makes tests run 10% faster, and makes further modernizations to our build/test stuff possible (such as using vite for frontend builds). This removes some of the junit exporting for Buildkite, and the vitest bazel defs don't really cleanly implement bazel testing guidelines (like sharding). But vitest is only used for unit tests (all integration/e2e/regression tests have always run in mocha), so none of them are very slow anyway. ## Codemods for vitest imports fastmod -e js,ts,tsx @jest/globals vitest client/ dev/release/ fastmod -e js,ts,tsx 'jest\.(\w+)\(' 'vi.$1(' client/ dev/release/ fastmod -e js,ts,tsx 'jest,' 'vi,' client/ dev/release/ fastmod -e js,ts,tsx 'jest }' 'vi }' client/ dev/release/ git diff --diff-filter=M --name-only | xargs pnpm exec prettier --write --- .eslintrc.js | 2 +- .mocharc.js | 2 +- .vscode/extensions.json | 1 - .vscode/launch.json | 22 - .vscode/settings.json | 1 - BUILD.bazel | 46 +- WORKSPACE | 23 - babel.config.jest.js | 30 - babel.config.js | 36 - client/BUILD.bazel | 6 +- client/app-shell/tsconfig.json | 4 - client/branded/BUILD.bazel | 23 +- client/branded/jest.config.js | 11 - client/branded/package.json | 4 +- .../components/Timestamp/Timestamp.test.tsx | 2 +- .../__snapshots__/Timestamp.test.tsx.snap | 20 +- client/branded/src/components/Toggle.test.tsx | 2 +- .../__snapshots__/Toggle.test.tsx.snap | 12 +- .../panel/TabbedPanelContent.test.tsx | 2 +- .../search-ui/components/CodeExcerpt.test.tsx | 2 +- .../FileContentSearchResult.test.tsx | 2 +- .../components/FileMatchChildren.test.tsx | 2 +- .../components/RepoFileLink.test.tsx | 2 +- .../SyntaxHighlightedSearchQuery.test.tsx | 2 +- .../__snapshots__/RepoFileLink.test.tsx.snap | 4 +- ...SyntaxHighlightedSearchQuery.test.tsx.snap | 10 +- .../search-ui/input/LazyQueryInput.test.tsx | 2 +- .../input/SearchContextDropdown.test.tsx | 2 +- .../input/SearchContextMenu.test.tsx | 2 +- .../LazyQueryInput.test.tsx.snap | 6 +- .../SearchContextMenu.test.tsx.snap | 4 +- .../input/codemirror/completion.test.ts | 2 +- .../codemirror/searchcontext.test.ts | 2 +- .../input/experimental/utils.test.ts | 2 +- .../search-ui/input/toggles/Toggles.test.tsx | 2 +- .../__snapshots__/Toggles.test.tsx.snap | 8 +- .../progress/StreamingProgressCount.test.tsx | 2 +- .../StreamingProgressSkippedButton.test.tsx | 2 +- .../StreamingProgressSkippedPopover.test.tsx | 2 +- .../StreamingProgressCount.test.tsx.snap | 14 +- ...eamingProgressSkippedPopover.test.tsx.snap | 4 +- .../exhaustive-search-validation.test.ts | 2 +- .../results/sidebar/FilterLink.test.tsx | 2 +- .../results/sidebar/QuickLink.test.tsx | 2 +- .../sidebar/SearchFilterSection.test.tsx | 2 +- .../__snapshots__/FilterLink.test.tsx.snap | 10 +- .../__snapshots__/QuickLink.test.tsx.snap | 4 +- .../search-ui/results/sidebar/helpers.test.ts | 2 +- .../results/use-items-to-show.test.ts | 2 +- client/branded/src/testGlobals.d.ts | 1 - client/branded/src/testSetup.test.ts | 11 + client/branded/tsconfig.json | 9 - client/branded/vitest.config.ts | 13 + client/browser/BUILD.bazel | 32 +- client/browser/config/BUILD.bazel | 1 - client/browser/jest.config.js | 14 - client/browser/package.json | 2 +- client/browser/src/globals.d.ts | 5 - .../bitbucket-cloud/codeHost.test.ts | 2 +- .../__snapshots__/domFunctions.test.tsx.snap | 34 +- .../code-hosts/bitbucket/codeHost.test.ts | 2 +- .../bitbucket/domFunctions.test.tsx | 2 +- .../code-hosts/bitbucket/scrape.test.ts | 2 +- .../__snapshots__/domFunctions.test.tsx.snap | 226 +-- .../github/__snapshots__/util.test.tsx.snap | 24 +- .../shared/code-hosts/github/codeHost.test.ts | 6 +- .../code-hosts/github/domFunctions.test.tsx | 2 +- .../shared/code-hosts/github/fileInfo.test.ts | 2 +- .../shared/code-hosts/github/util.test.tsx | 2 +- .../__snapshots__/domFunctions.test.tsx.snap | 58 +- .../shared/code-hosts/gitlab/codeHost.test.ts | 6 +- .../code-hosts/gitlab/domFunctions.test.tsx | 2 +- .../shared/code-hosts/gitlab/scrape.test.ts | 2 +- .../__snapshots__/domFunctions.test.tsx.snap | 74 +- .../code-hosts/phabricator/codeHost.test.ts | 2 +- .../phabricator/domFunctions.test.tsx | 2 +- .../code-hosts/phabricator/fileInfo.test.ts | 2 +- .../shared/ViewOnSourcegraphButton.test.tsx | 2 +- .../ViewOnSourcegraphButton.test.tsx.snap | 18 +- .../code-hosts/shared/codeHost.test.tsx | 4 +- .../code-hosts/shared/codeHostTestUtils.ts | 2 +- .../code-hosts/shared/codeViews.test.ts | 2 +- .../shared/code-hosts/shared/views.test.ts | 2 +- .../code-hosts/sourcegraph/inject.test.tsx | 2 +- .../browser/src/shared/jestSetupAfterEnv.js | 4 - client/browser/src/testGlobals.d.ts | 1 - client/browser/src/testSetup.test.ts | 19 + client/browser/tsconfig.json | 3 - client/browser/vitest.config.ts | 41 + client/build-config/BUILD.bazel | 6 - client/build-config/jest.config.js | 13 - client/build-config/package.json | 2 +- client/client-api/BUILD.bazel | 2 +- client/client-api/jest.config.js | 13 - client/client-api/package.json | 2 +- client/client-api/src/hover.test.ts | 2 +- client/client-api/tsconfig.json | 4 - client/client-api/vitest.config.ts | 3 + client/codeintellify/BUILD.bazel | 9 +- client/codeintellify/jest.config.js | 13 - client/codeintellify/package.json | 5 +- client/codeintellify/src/hoverifier.test.ts | 2 +- client/codeintellify/src/loading.test.ts | 2 +- .../codeintellify/src/overlayPosition.test.ts | 2 +- client/codeintellify/src/positions.test.ts | 5 +- client/codeintellify/src/testSetup.test.ts | 1 + .../codeintellify/src/testutils/dom.test.ts | 2 +- .../codeintellify/src/testutils/globals.d.ts | 1 - .../codeintellify/src/tokenPosition.test.ts | 2 +- client/codeintellify/vitest.config.ts | 9 + client/common/BUILD.bazel | 22 +- client/common/jest.config.js | 14 - client/common/package.json | 2 +- client/common/src/errors/errors.test.ts | 2 +- client/common/src/jestSetupAfterEnv.js | 4 - client/common/src/util/fetchCache.test.ts | 6 +- client/common/src/util/hashCode.test.ts | 5 +- client/common/src/util/highlightNode.test.ts | 2 +- client/common/src/util/jsonc.test.ts | 2 +- .../common/src/util/markdown/markdown.test.ts | 2 +- .../common/src/util/rxjs/asObservable.test.ts | 2 +- .../util/rxjs/combineLatestOrDefault.test.ts | 2 +- .../common/src/util/rxjs/repeatUntil.test.ts | 2 +- client/common/src/util/string.test.ts | 2 +- client/common/src/util/url.test.ts | 2 +- client/common/vitest.config.ts | 7 + client/http-client/BUILD.bazel | 6 +- client/http-client/jest.config.js | 13 - client/http-client/package.json | 2 +- .../apollo/fromObservableQuery.test.ts | 2 +- .../http-client/src/graphql/graphql.test.ts | 2 +- client/http-client/vitest.config.ts | 3 + client/jetbrains/BUILD.bazel | 1 - client/jetbrains/globals.d.ts | 5 - client/jetbrains/tsconfig.json | 4 - client/observability-client/BUILD.bazel | 6 +- client/observability-client/jest.config.js | 13 - client/observability-client/package.json | 2 +- .../src/sdk/__tests__/getTracingUrl.test.ts | 2 +- client/observability-client/tsconfig.json | 6 +- client/observability-client/vitest.config.ts | 3 + client/observability-server/BUILD.bazel | 6 +- client/observability-server/jest.config.js | 13 - client/observability-server/package.json | 2 +- .../webBundleSize/getBundleSizeStats.test.ts | 2 +- client/observability-server/vitest.config.ts | 3 + client/shared/BUILD.bazel | 22 +- client/shared/dev/BUILD.bazel | 60 - client/shared/dev/jest-environment.js | 41 - client/shared/dev/mockDate.js | 5 - client/shared/dev/mockDomRect.ts | 7 - client/shared/dev/mockEventLogger.ts | 10 - client/shared/dev/mockMatchMedia.ts | 20 - client/shared/dev/mockResizeObserver.ts | 12 - client/shared/dev/mockSentryBrowser.ts | 8 - client/shared/jest.config.js | 11 - client/shared/package.json | 2 +- client/shared/src/actions/ActionItem.test.tsx | 4 +- .../src/actions/ActionsNavItems.test.tsx | 4 +- .../__snapshots__/ActionItem.test.tsx.snap | 30 +- .../ActionsNavItems.test.tsx.snap | 4 +- .../src/api/client/mainthread-api.test.ts | 2 +- .../src/api/client/types/textDocument.test.ts | 2 +- .../api/extension/api/context/context.test.ts | 2 +- .../api/extension/api/contribution.test.ts | 2 +- .../api/extension/api/textDocument.test.ts | 2 +- .../api/utils/prefixSumComputer.test.ts | 2 +- .../extension/api/utils/wordHelpers.test.ts | 2 +- .../src/api/extension/test/activation.test.ts | 2 +- .../test/extensionHost.configuration.test.ts | 2 +- .../extensionHost.documentHighlights.test.ts | 2 +- .../test/extensionHost.hover.test.ts | 2 +- .../test/extensionHost.logging.test.ts | 2 +- .../test/extensionHost.providers.test.ts | 2 +- .../api/integration-test/codeEditor.test.ts | 2 +- .../src/api/integration-test/commands.test.ts | 2 +- .../integration-test/configuration.test.ts | 2 +- .../api/integration-test/documents.test.ts | 2 +- .../src/api/integration-test/internal.test.ts | 2 +- .../integration-test/languageFeatures.test.ts | 2 +- .../src/api/integration-test/roots.test.ts | 2 +- .../api/integration-test/selections.test.ts | 2 +- .../src/api/integration-test/windows.test.ts | 2 +- client/shared/src/api/util.test.ts | 2 +- client/shared/src/backend/errors.test.ts | 2 +- .../codeintel/legacy-extensions/init.test.ts | 2 +- .../language-specs/cpp.test.ts | 2 +- .../language-specs/go.test.ts | 2 +- .../language-specs/java.test.ts | 2 +- .../language-specs/python.test.ts | 2 +- .../language-specs/spec.test.ts | 2 +- .../language-specs/typescript.test.ts | 2 +- .../lsif/definition-hover.test.ts | 2 +- .../legacy-extensions/lsif/highlights.test.ts | 2 +- .../legacy-extensions/lsif/locations.test.ts | 2 +- .../legacy-extensions/lsif/providers.test.ts | 2 +- .../legacy-extensions/lsif/ranges.test.ts | 2 +- .../legacy-extensions/lsif/references.test.ts | 2 +- .../legacy-extensions/lsif/stencil.test.ts | 2 +- .../legacy-extensions/lsif/util.test.ts | 2 +- .../legacy-extensions/providers.test.ts | 2 +- .../search/conversion.test.ts | 2 +- .../search/docstrings.test.ts | 2 +- .../legacy-extensions/search/markdown.test.ts | 2 +- .../search/providers.test.ts | 2 +- .../legacy-extensions/search/queries.test.ts | 2 +- .../legacy-extensions/search/tokens.test.ts | 2 +- .../legacy-extensions/util/ix.test.ts | 2 +- .../legacy-extensions/util/uri.test.ts | 2 +- client/shared/src/commands/commands.test.ts | 2 +- .../components/HighlightedMatches.test.tsx | 2 +- client/shared/src/components/Path.test.tsx | 2 +- .../shared/src/components/RepoLink.test.tsx | 2 +- .../shared/src/components/UserAvatar.test.tsx | 2 +- .../HighlightedMatches.test.tsx.snap | 4 +- .../__snapshots__/Path.test.tsx.snap | 10 +- .../__snapshots__/RepoLink.test.tsx.snap | 6 +- .../__snapshots__/UserAvatar.test.tsx.snap | 6 +- .../components/ranking/LineRanking.test.tsx | 2 +- .../components/ranking/ZoektRanking.test.tsx | 2 +- .../src/contributions/contributions.test.ts | 2 +- .../shared/src/extensions/extension.test.ts | 2 +- client/shared/src/globals.d.ts | 5 - client/shared/src/hover/HoverOverlay.test.tsx | 2 +- .../__snapshots__/HoverOverlay.test.tsx.snap | 38 +- client/shared/src/hover/actions.test.ts | 2 +- .../useKeyboardShortcut.test.tsx | 2 +- client/shared/src/languages.test.ts | 2 +- client/shared/src/polyfills/index.ts | 3 +- client/shared/src/polyfills/polyfill.ts | 1 - .../react-shortcuts/ShortcutManager.test.tsx | 14 +- .../src/search/helpers/queryExample.test.ts | 2 +- .../shared/src/search/query/analyze.test.ts | 2 +- .../src/search/query/decoratedToken.test.ts | 2 +- .../src/search/query/diagnostics.test.ts | 2 +- .../shared/src/search/query/filters.test.ts | 2 +- .../src/search/query/languageFilter.test.ts | 2 +- .../shared/src/search/query/metrics.test.ts | 2 +- client/shared/src/search/query/parser.test.ts | 2 +- .../src/search/query/patternMatcher.test.ts | 17 +- .../src/search/query/predicates.test.ts | 2 +- .../shared/src/search/query/printer.test.ts | 2 +- .../src/search/query/providers-utils.test.ts | 2 +- .../shared/src/search/query/scanner.test.ts | 2 +- .../src/search/query/selectFilter.test.ts | 2 +- .../src/search/query/transformer.test.ts | 2 +- .../shared/src/search/query/validate.test.ts | 2 +- client/shared/src/settings/settings.test.ts | 2 +- client/shared/src/settings/settings.tsx | 2 +- .../temporary/useTemporarySetting.test.tsx | 2 +- client/shared/src/testGlobals.d.ts | 1 - client/shared/src/testSetup.test.ts | 1 + client/shared/src/testing/BUILD.bazel | 3 +- client/shared/src/testing/config.ts | 2 +- client/shared/src/testing/dom-utils.ts | 4 +- client/shared/src/testing/driver.ts | 7 +- .../src/testing/mockReactVisibilitySensor.tsx | 4 +- client/shared/src/testing/testHelpers.ts | 2 +- client/shared/src/testing/tsconfig.json | 3 - client/shared/src/tracking/utm.test.ts | 2 +- .../src/types/core-js/configurator.d.ts | 4 +- client/shared/src/types/jasmine/index.d.ts | 4 - .../src/types/puppeteer-firefox/index.d.ts | 3 - .../src/types/storybook-chromatic/index.d.ts | 12 - client/shared/src/types/web-ext/index.d.ts | 15 - client/shared/src/util/dom.test.ts | 2 +- client/shared/src/util/url.test.ts | 2 +- .../src/util/useInputValidation.test.ts | 2 +- client/shared/tsconfig.json | 4 - client/shared/vitest.config.ts | 11 + client/storybook/jest.config.js | 13 - client/storybook/package.json | 2 +- client/template-parser/BUILD.bazel | 12 +- client/template-parser/jest.config.js | 13 - client/template-parser/package.json | 2 +- .../src/expr/evaluator.test.ts | 2 +- client/template-parser/src/expr/lexer.test.ts | 2 +- .../template-parser/src/expr/parser.test.ts | 2 +- client/template-parser/vitest.config.ts | 3 + client/testing/BUILD.bazel | 29 +- client/testing/jest.config.js | 13 - client/testing/package.json | 2 +- client/testing/src/aria-asserts.ts | 6 +- client/{shared/dev => testing/src}/fetch.js | 0 .../src/globalTestSetup.ts} | 4 +- client/testing/src/jestDomMatchers.ts | 10 + client/testing/src/mockDate.ts | 4 + client/testing/src/mockMatchMedia.ts | 20 + client/testing/src/mockResizeObserver.ts | 8 + .../dev => testing/src}/mockUniqueId.ts | 17 +- .../dev => testing/src}/reactCleanup.ts | 2 +- client/web/BUILD.bazel | 24 +- client/web/{src => }/__mocks__/zustand.ts | 2 +- client/web/dev/BUILD.bazel | 24 +- client/web/dev/esbuild/manifest.test.ts | 2 +- client/web/dev/jest.config.js | 12 - client/web/dev/tsconfig.json | 2 +- client/web/dev/vitest.config.ts | 3 + client/web/jest.config.js | 14 - client/web/package.json | 2 +- client/web/src/auth/PostSignUpPage.test.tsx | 2 +- .../web/src/auth/RequestAccessPage.test.tsx | 2 +- client/web/src/auth/SignInPage.test.tsx | 2 +- client/web/src/auth/SignUpPage.test.tsx | 2 +- .../PostSignUpPage.test.tsx.snap | 10 +- .../RequestAccessPage.test.tsx.snap | 15 +- .../__snapshots__/SignInPage.test.tsx.snap | 28 +- .../__snapshots__/SignUpPage.test.tsx.snap | 8 +- .../web/src/backend/persistenceMapper.test.ts | 2 +- .../src/codeintel/ReferencesPanel.test.tsx | 4 +- .../web/src/components/ErrorBoundary.test.tsx | 6 +- client/web/src/components/ErrorBoundary.tsx | 4 +- .../FilteredConnection.test.tsx | 2 +- .../hooks/usePageSwitcherPagination.test.tsx | 2 +- .../hooks/useShowMorePagination.test.tsx | 2 +- .../KeyboardShortcutsHelp.test.tsx | 2 +- .../KeyboardShortcutsHelp.test.tsx.snap | 4 +- .../web/src/components/LoaderButton.test.tsx | 2 +- .../__snapshots__/ErrorBoundary.test.tsx.snap | 8 +- .../__snapshots__/LoaderButton.test.tsx.snap | 6 +- .../components/branding/BrandLogo.test.tsx | 2 +- .../__snapshots__/BrandLogo.test.tsx.snap | 18 +- .../web/src/components/diff/DiffHunk.test.tsx | 2 +- .../components/diff/DiffSplitHunk.test.tsx | 2 +- .../web/src/components/diff/DiffStat.test.tsx | 2 +- .../diff/__snapshots__/DiffHunk.test.tsx.snap | 7 +- .../diff/__snapshots__/DiffStat.test.tsx.snap | 6 +- .../ExternalServiceForm.test.tsx | 4 +- .../ExternalServiceGroup.test.tsx | 2 +- .../ExternalServiceForm.test.tsx.snap | 8 +- .../ExternalServiceGroup.test.tsx.snap | 6 +- .../externalServices.test.tsx | 2 +- .../components/fuzzyFinder/FuzzyFiles.test.ts | 2 +- .../fuzzyFinder/FuzzyFinder.test.tsx | 2 +- client/web/src/end-to-end/utils/cloneRepos.ts | 2 +- .../batches/MultiSelectContext.test.tsx | 2 +- .../batches/batch-spec/yaml-util.test.ts | 2 +- .../batches/settings/format.test.ts | 2 +- .../CodeMonitoringPage.test.tsx | 2 +- .../CreateCodeMonitorPage.test.tsx | 2 +- .../ManageCodeMonitorPage.test.tsx | 2 +- .../components/CodeMonitorForm.test.tsx | 2 +- .../components/FormActionArea.test.tsx | 2 +- .../components/FormTriggerArea.test.tsx | 2 +- .../FormActionArea.test.tsx.snap | 4 +- .../components/actions/ActionEditor.test.tsx | 2 +- .../components/actions/EmailAction.test.tsx | 2 +- .../actions/SlackWebhookAction.test.tsx | 2 +- .../components/actions/WebhookAction.test.tsx | 2 +- .../auto-index-to-schema.test.tsx.snap | 6 +- .../auto-index-to-schema.test.tsx | 2 +- .../get-interval-description.text.test.ts | 2 +- .../use-prallel-requests.test.ts | 22 +- .../pages/CodeInsightsRootPage.test.tsx | 20 +- .../DashboardsContentPage.test.tsx | 6 +- .../capture-insight-url-parsers.test.ts | 2 +- .../utils/search-query-validator.test.ts | 2 +- .../search-insight-url-parsers.test.ts | 2 +- .../use-url-query-insight.test.ts | 2 +- .../settings/RepoSettingsLogsPage.test.tsx | 4 +- .../RepoSettingsLogsPage.test.tsx.snap | 40 +- .../enterprise/repo/settings/utils.test.ts | 2 +- .../SearchContextsList.test.tsx | 2 +- ...ProductLicenseForSubscriptionForm.test.tsx | 2 +- .../SiteAdminProductLicenseNode.test.tsx | 4 +- ...ctLicenseForSubscriptionForm.test.tsx.snap | 4 +- .../SiteAdminProductLicenseNode.test.tsx.snap | 6 +- .../dotcom/productSubscriptions/utils.test.ts | 2 +- .../UserProductSubscriptionStatus.test.tsx | 8 +- ...scriptionsProductSubscriptionPage.test.tsx | 2 +- ...serProductSubscriptionStatus.test.tsx.snap | 6 +- ...tionsProductSubscriptionPage.test.tsx.snap | 4 +- .../auth/UserSettingsPermissionsPage.test.tsx | 2 +- .../UserSettingsPermissionsPage.test.tsx.snap | 6 +- .../lib/parseUrlOverrideFeatureFlags.test.ts | 2 +- .../src/featureFlags/useFeatureFlag.test.tsx | 2 +- .../src/featureFlags/withFeatureFlag.test.tsx | 2 +- .../CaseInsensitiveFuzzySearch.test.ts | 2 +- .../WordSensitiveFuzzySearch.test.ts | 2 +- client/web/src/global/Notices.test.tsx | 2 +- .../__snapshots__/Notices.test.tsx.snap | 6 +- .../useScrollManager.test.tsx | 8 +- .../web/src/hooks/useUrlSyncedState.test.ts | 2 +- .../web/src/hooks/useUrlSyncedString.test.tsx | 2 +- .../insights/utils/use-series-toggle.test.tsx | 2 +- .../src/marketing/page/SurveyPage.test.tsx | 2 +- .../src/marketing/toast/SurveyToast.test.tsx | 2 +- .../monitoring/shouldErrorBeReported.test.ts | 2 +- client/web/src/nav/GlobalNavbar.test.tsx | 6 +- .../src/nav/StatusMessagesNavItem.test.tsx | 2 +- client/web/src/nav/UserNavItem.test.tsx | 2 +- .../__snapshots__/GlobalNavbar.test.tsx.snap | 4 +- .../StatusMessagesNavItem.test.tsx.snap | 6 +- .../__snapshots__/UserNavItem.test.tsx.snap | 4 +- .../serialize/convertMarkdownToBlocks.test.ts | 2 +- .../web/src/notebooks/serialize/index.test.ts | 2 +- .../onboarding/OnboardingChecklist.test.tsx | 2 +- .../web/src/open-in-editor/build-url.test.ts | 2 +- .../migrate-legacy-settings.test.ts | 2 +- client/web/src/person/PersonLink.test.tsx | 2 +- .../__snapshots__/PersonLink.test.tsx.snap | 8 +- .../repo/RepoRevisionSidebarSymbols.test.tsx | 2 +- .../RepositoriesPopover.test.tsx | 2 +- .../RevisionsPopover.test.tsx | 2 +- .../actions/ToggleRenderedFileMode.test.tsx | 2 +- .../codemirror/document-highlights.test.ts | 2 +- .../src/repo/blob/codemirror/utils.test.ts | 2 +- .../commit/CommitMessageWithLinks.test.tsx | 2 +- .../CommitMessageWithLinks.test.tsx.snap | 6 +- .../repo/commits/GitCommitNodeByline.test.tsx | 2 +- .../GitCommitNodeByline.test.tsx.snap | 14 +- .../web/src/repo/linkifiy/get-links.test.ts | 2 +- .../RepositoryReleasesTagsPage.test.tsx | 2 +- .../RepositoryReleasesTagsPage.test.tsx.snap | 6 +- client/web/src/repo/tree/TreePage.test.tsx | 2 +- client/web/src/repo/utils.test.ts | 2 +- client/web/src/search/Notepad.test.tsx | 4 +- client/web/src/search/helpers.test.tsx | 2 +- client/web/src/search/index.test.ts | 2 +- .../search/input/useRecentSearches.test.tsx | 2 +- .../results/SearchResultsInfoBar.test.tsx | 2 +- .../results/StreamingSearchResults.test.tsx | 4 +- .../SearchResultsInfoBar.test.tsx.snap | 12 +- .../export/searchResultsExport.test.ts | 2 +- .../search/results/sidebar/Revisions.test.tsx | 2 +- .../SiteAdminFeatureFlagsPage.test.ts | 2 +- .../SiteAdminMigrationsPage.test.ts | 2 +- .../src/site-admin/init/SiteInitPage.test.tsx | 2 +- .../__snapshots__/SiteInitPage.test.tsx.snap | 6 +- .../src/site/LicenseExpirationAlert.test.tsx | 2 +- .../LicenseExpirationAlert.test.tsx.snap | 6 +- .../src/stores/navbarSearchQueryState.test.ts | 2 +- client/web/src/stores/notepad.test.ts | 4 +- client/web/src/testGlobals.d.ts | 1 - client/web/src/testSetup.test.ts | 26 + .../src/tour/components/Tour/Tour.test.tsx | 2 +- .../src/tour/components/Tour/useTour.test.tsx | 2 +- client/web/src/tracking/userTracker.test.ts | 2 +- client/web/src/tracking/util.test.ts | 2 +- client/web/src/user/index.test.ts | 2 +- .../settings/auth/ExternalAccount.test.tsx | 2 +- .../auth/ExternalAccountsSignIn.test.tsx | 2 +- .../ExternalAccount.test.tsx.snap | 42 +- .../ExternalAccountsSignIn.test.tsx.snap | 4 +- .../profile/UserSettingsProfilePage.test.tsx | 2 +- .../research/ProductResearch.test.tsx | 2 +- .../util/checkRequestAccessAllowed.test.ts | 2 +- client/web/src/util/codeStatsUtils.test.ts | 2 +- client/web/src/util/getReactElements.test.tsx | 2 +- client/web/src/util/prettyBytesBigint.test.ts | 2 +- client/web/src/util/size.test.ts | 2 +- client/web/src/util/time.test.ts | 2 +- client/web/src/util/url.test.ts | 2 +- client/web/tsconfig.json | 6 +- client/web/vitest.config.ts | 22 + client/wildcard/BUILD.bazel | 19 +- client/wildcard/jest.config.js | 11 - client/wildcard/package.json | 2 +- .../src/components/Alert/Alert.test.tsx | 2 +- .../Alert/__snapshots__/Alert.test.tsx.snap | 20 +- .../src/components/Button/Button.test.tsx | 2 +- .../Button/__snapshots__/Button.test.tsx.snap | 28 +- .../components/ButtonLink/ButtonLink.test.tsx | 2 +- .../__snapshots__/ButtonLink.test.tsx.snap | 10 +- .../src/components/Card/Card.test.tsx | 2 +- .../Card/__snapshots__/Card.test.tsx.snap | 4 +- .../components/line-chart/LineChart.test.tsx | 2 +- .../tooltip/utils/get-list-window.test.ts | 2 +- .../get-series-data.test.ts | 2 +- .../utils/get-min-max-boundary.test.ts | 2 +- .../stacked-meter/StackedMeter.test.tsx | 2 +- .../__snapshots__/StackedMeter.test.tsx.snap | 4 +- .../src/components/Collapse/Collapse.test.tsx | 2 +- .../__snapshots__/Collapse.test.tsx.snap | 8 +- .../components/ErrorAlert/ErrorAlert.test.tsx | 2 +- .../__snapshots__/ErrorAlert.test.tsx.snap | 8 +- .../FeedbackBadge/FeedbackBadge.test.tsx | 2 +- .../__snapshots__/FeedbackBadge.test.tsx.snap | 12 +- .../FeedbackPrompt/FeedbackPrompt.test.tsx | 2 +- .../FeedbackPrompt.test.tsx.snap | 18 +- .../FeedbackText/FeedbackText.test.tsx | 2 +- .../__snapshots__/FeedbackText.test.tsx.snap | 8 +- .../src/components/Form/Input/Input.test.tsx | 2 +- .../Input/__snapshots__/Input.test.tsx.snap | 10 +- .../Form/LoaderInput/LoaderInput.test.tsx | 2 +- .../__snapshots__/LoaderInput.test.tsx.snap | 6 +- .../components/Form/Select/Select.test.tsx | 2 +- .../Select/__snapshots__/Select.test.tsx.snap | 18 +- .../Form/TextArea/TextArea.test.tsx | 2 +- .../__snapshots__/TextArea.test.tsx.snap | 4 +- .../Form/internal/BaseControlInput.test.tsx | 2 +- .../BaseControlInput.test.tsx.snap | 26 +- .../src/components/Icon/Icon.test.tsx | 2 +- .../Icon/__snapshots__/Icon.test.tsx.snap | 16 +- .../Link/AnchorLink/AnchorLink.test.tsx | 2 +- .../__snapshots__/AnchorLink.test.tsx.snap | 4 +- .../src/components/Link/Link/Link.tsx | 4 +- .../Link/LinkOrSpan/LinkOrSpan.test.tsx | 2 +- .../__snapshots__/LinkOrSpan.test.tsx.snap | 6 +- .../Link/RouterLink/RouterLink.test.tsx | 2 +- .../__snapshots__/RouterLink.test.tsx.snap | 6 +- .../components/Link/createLinkUrl.test.tsx | 2 +- .../src/components/Markdown/Markdown.test.tsx | 2 +- .../__snapshots__/Markdown.test.tsx.snap | 4 +- .../src/components/NavMenu/NavMenu.test.tsx | 2 +- .../__snapshots__/NavMenu.test.tsx.snap | 4 +- .../components/PageHeader/PageHeader.test.tsx | 2 +- .../__snapshots__/PageHeader.test.tsx.snap | 4 +- .../PageSelector/PageSelector.test.tsx | 2 +- .../PageSwitcher/PageSwitcher.test.tsx | 2 +- .../src/components/Panel/Panel.test.tsx | 2 +- .../Panel/__snapshots__/Panel.test.tsx.snap | 4 +- .../tether/models/geometry/rectangle.test.ts | 2 +- .../actions/get-constrained-element.test.ts | 2 +- .../src/components/Tabs/Tabs.test.tsx | 2 +- .../src/components/Tooltip/Tooltip.test.tsx | 2 +- .../src/components/Tree/Tree.test.tsx | 2 +- .../components/Typography/Code/Code.test.tsx | 2 +- .../Code/__snapshots__/Code.test.tsx.snap | 6 +- .../components/Typography/Heading/H1.test.tsx | 2 +- .../components/Typography/Heading/H2.test.tsx | 2 +- .../components/Typography/Heading/H3.test.tsx | 2 +- .../components/Typography/Heading/H4.test.tsx | 2 +- .../components/Typography/Heading/H5.test.tsx | 2 +- .../components/Typography/Heading/H6.test.tsx | 2 +- .../Heading/__snapshots__/H1.test.tsx.snap | 6 +- .../Heading/__snapshots__/H2.test.tsx.snap | 6 +- .../Heading/__snapshots__/H3.test.tsx.snap | 6 +- .../Heading/__snapshots__/H4.test.tsx.snap | 6 +- .../Heading/__snapshots__/H5.test.tsx.snap | 6 +- .../Heading/__snapshots__/H6.test.tsx.snap | 6 +- .../Typography/Label/Label.test.tsx | 2 +- .../Label/__snapshots__/Label.test.tsx.snap | 6 +- .../components/Typography/Text/Text.test.tsx | 2 +- .../Text/__snapshots__/Text.test.tsx.snap | 6 +- client/wildcard/src/globals.d.ts | 5 - .../src/hooks/useCookieStorage.test.ts | 2 +- .../wildcard/src/hooks/useObservable.test.ts | 2 +- .../src/hooks/useTimeoutManager.test.ts | 2 +- client/wildcard/src/testing/globals.d.ts | 1 - .../testing/render-with-branded-context.tsx | 4 +- client/wildcard/src/testing/testSetup.test.ts | 1 + .../src/utils/linkClickHandler.test.tsx | 2 +- client/wildcard/tsconfig.json | 4 - client/wildcard/vitest.config.ts | 13 + dev/ci/internal/ci/changed/diff.go | 3 - dev/ci/internal/ci/changed/files.go | 4 +- dev/ci/pnpm-test-separate.sh | 20 - dev/ci/pnpm-test.sh | 22 - dev/defs.bzl | 39 +- dev/eslint.bzl | 1 - dev/update-embeddings-list/babel.config.js | 3 - dev/update-embeddings-list/package.json | 2 +- dev/update-embeddings-list/src/index.test.ts | 2 +- doc/dev/background-information/bazel/web.md | 7 +- .../bazel/web_overview.md | 8 +- .../background-information/ci/development.md | 29 - .../testing_web_code.md | 2 +- doc/dev/how-to/cache_ci_artefacts.md | 5 +- .../ci_soft_failure_and_still_notify.md | 6 +- doc/dev/how-to/testing.md | 12 +- jest.config.base.js | 128 -- jest.config.js | 6 - jest.snapshot-resolver.js | 39 - package.json | 27 +- pnpm-lock.yaml | 1589 ++++------------- sg.config.yaml | 114 +- vitest.shared.ts | 145 ++ vitest.workspace.ts | 18 + 569 files changed, 2027 insertions(+), 3453 deletions(-) delete mode 100644 babel.config.jest.js delete mode 100644 babel.config.js delete mode 100644 client/branded/jest.config.js delete mode 100644 client/branded/src/testGlobals.d.ts create mode 100644 client/branded/src/testSetup.test.ts create mode 100644 client/branded/vitest.config.ts delete mode 100644 client/browser/jest.config.js delete mode 100644 client/browser/src/shared/jestSetupAfterEnv.js delete mode 100644 client/browser/src/testGlobals.d.ts create mode 100644 client/browser/src/testSetup.test.ts create mode 100644 client/browser/vitest.config.ts delete mode 100644 client/build-config/jest.config.js delete mode 100644 client/client-api/jest.config.js create mode 100644 client/client-api/vitest.config.ts delete mode 100644 client/codeintellify/jest.config.js create mode 100644 client/codeintellify/src/testSetup.test.ts delete mode 100644 client/codeintellify/src/testutils/globals.d.ts create mode 100644 client/codeintellify/vitest.config.ts delete mode 100644 client/common/jest.config.js delete mode 100644 client/common/src/jestSetupAfterEnv.js create mode 100644 client/common/vitest.config.ts delete mode 100644 client/http-client/jest.config.js create mode 100644 client/http-client/vitest.config.ts delete mode 100644 client/observability-client/jest.config.js create mode 100644 client/observability-client/vitest.config.ts delete mode 100644 client/observability-server/jest.config.js create mode 100644 client/observability-server/vitest.config.ts delete mode 100644 client/shared/dev/jest-environment.js delete mode 100644 client/shared/dev/mockDate.js delete mode 100644 client/shared/dev/mockDomRect.ts delete mode 100644 client/shared/dev/mockEventLogger.ts delete mode 100644 client/shared/dev/mockMatchMedia.ts delete mode 100644 client/shared/dev/mockResizeObserver.ts delete mode 100644 client/shared/dev/mockSentryBrowser.ts delete mode 100644 client/shared/jest.config.js delete mode 100644 client/shared/src/testGlobals.d.ts create mode 100644 client/shared/src/testSetup.test.ts delete mode 100644 client/shared/src/types/jasmine/index.d.ts delete mode 100644 client/shared/src/types/puppeteer-firefox/index.d.ts delete mode 100644 client/shared/src/types/storybook-chromatic/index.d.ts delete mode 100644 client/shared/src/types/web-ext/index.d.ts create mode 100644 client/shared/vitest.config.ts delete mode 100644 client/storybook/jest.config.js delete mode 100644 client/template-parser/jest.config.js create mode 100644 client/template-parser/vitest.config.ts delete mode 100644 client/testing/jest.config.js rename client/{shared/dev => testing/src}/fetch.js (100%) rename client/{shared/dev/jestGlobalSetup.js => testing/src/globalTestSetup.ts} (73%) create mode 100644 client/testing/src/jestDomMatchers.ts create mode 100644 client/testing/src/mockDate.ts create mode 100644 client/testing/src/mockMatchMedia.ts create mode 100644 client/testing/src/mockResizeObserver.ts rename client/{shared/dev => testing/src}/mockUniqueId.ts (50%) rename client/{shared/dev => testing/src}/reactCleanup.ts (88%) rename client/web/{src => }/__mocks__/zustand.ts (96%) delete mode 100644 client/web/dev/jest.config.js create mode 100644 client/web/dev/vitest.config.ts delete mode 100644 client/web/jest.config.js delete mode 100644 client/web/src/testGlobals.d.ts create mode 100644 client/web/src/testSetup.test.ts create mode 100644 client/web/vitest.config.ts delete mode 100644 client/wildcard/jest.config.js delete mode 100644 client/wildcard/src/testing/globals.d.ts create mode 100644 client/wildcard/src/testing/testSetup.test.ts create mode 100644 client/wildcard/vitest.config.ts delete mode 100755 dev/ci/pnpm-test-separate.sh delete mode 100755 dev/ci/pnpm-test.sh delete mode 100644 dev/update-embeddings-list/babel.config.js delete mode 100644 jest.config.base.js delete mode 100644 jest.config.js delete mode 100644 jest.snapshot-resolver.js create mode 100644 vitest.shared.ts create mode 100644 vitest.workspace.ts diff --git a/.eslintrc.js b/.eslintrc.js index 11713cfd816..3fd224fffd7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,7 +22,6 @@ const config = { '**/*.json', '**/*.d.ts', 'eslint-relative-formatter.js', - 'jest.config.js', 'typedoc.js', 'bundlesize.config.js', ], @@ -135,6 +134,7 @@ See https://handbook.sourcegraph.com/community/faq#is-all-of-sourcegraph-open-so '!@sourcegraph/*/src/stories', '!@sourcegraph/build-config/src/esbuild/*', '!@sourcegraph/build-config/src/*', + '!@sourcegraph/testing/src/jestDomMatchers', ], message: 'Imports from package internals are banned. Add relevant export to the entry point of the package to import it from the outside world.', diff --git a/.mocharc.js b/.mocharc.js index 640dfb7b4af..3d018039207 100644 --- a/.mocharc.js +++ b/.mocharc.js @@ -5,7 +5,7 @@ module.exports = { require: [ ...(IS_BAZEL ? [] : ['ts-node/register/transpile-only']), 'abort-controller/polyfill', - rootDir + '/client/shared/dev/fetch', + rootDir + '/client/testing/src/fetch', rootDir + '/client/shared/dev/suppressPollyErrors', ], reporter: rootDir + '/client/shared/dev/customMochaSpecReporter.js', diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9a71917ed30..163d28ea915 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -11,7 +11,6 @@ "exiasr.hadolint", "bierner.markdown-mermaid", "ecmel.vscode-html-css", - "orta.vscode-jest", "dbaeumer.vscode-eslint", "foxundermoon.shell-format", "timonwong.shellcheck", diff --git a/.vscode/launch.json b/.vscode/launch.json index 89bed4992ae..911c7774b43 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -74,28 +74,6 @@ "E2E_BROWSER": "chrome" } }, - { - "type": "node", - "name": "vscode-jest-tests", - "request": "launch", - "program": "${workspaceFolder}/node_modules/jest/bin/jest", - "args": [ - "--color", - "--runInBand" - // "path/to/test/file", - // "-t", - // "test name", - ], - "cwd": "${workspaceFolder}", - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "skipFiles": [ - "**/async_hooks.js", - "**/inspector_async_hook.js" - // "**/node_modules/rxjs", - ], - "smartStep": false - }, { "name": "Webapp Chrome", "type": "chrome", diff --git a/.vscode/settings.json b/.vscode/settings.json index 6d83a012055..1b17d6d0980 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -37,7 +37,6 @@ "build.allowImplicitNetworkAccess": true, "local": "github.com/sourcegraph/sourcegraph" }, - "jest.jestCommandLine": "pnpm run test", "npm.packageManager": "pnpm", "npm.runSilent": true, "typescript.preferences.quoteStyle": "single", diff --git a/BUILD.bazel b/BUILD.bazel index 9c22ead4c4e..c1b1cd0e19e 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -83,58 +83,20 @@ copy_to_bin( ) js_library( - name = "jest_config", + name = "vitest_config", testonly = True, srcs = [ - "jest.config.base.js", - ], - data = [ - "jest.snapshot-resolver.js", + "vitest.shared.ts", ], visibility = ["//visibility:public"], deps = [ - ":babel_config_jest", "//:node_modules/@testing-library/jest-dom", "//:node_modules/abort-controller", - "//:node_modules/babel-jest", "//:node_modules/core-js", "//:node_modules/identity-obj-proxy", "//:node_modules/message-port-polyfill", "//:node_modules/regenerator-runtime", - "//client/shared/dev:mock", - ], -) - -js_library( - name = "babel_config_jest", - testonly = True, - srcs = [ - "babel.config.jest.js", - ], - visibility = ["//visibility:public"], - deps = [ - "//:node_modules/@babel/preset-env", - "//:node_modules/@babel/runtime", - "//:node_modules/signale", - ], -) - -js_library( - name = "babel_config", - srcs = [ - "babel.config.js", - ], - data = [ - ":package_json", - ], - visibility = ["//visibility:public"], - deps = [ - "//:node_modules/@babel/preset-env", - "//:node_modules/@babel/preset-react", - "//:node_modules/@babel/preset-typescript", - "//:node_modules/@babel/runtime", - "//:node_modules/semver", - "//:node_modules/signale", + "//client/testing:testing_lib", ], ) @@ -146,9 +108,9 @@ js_library( ], deps = [ "//:node_modules/abort-controller", - "//client/shared/dev:fetch-mock", "//client/shared/dev:mocha-reporter", "//client/shared/dev:suppress-polly-errors", + "//client/testing:fetch-mock", ], ) diff --git a/WORKSPACE b/WORKSPACE index 4f91499a1b2..d2d9a02cfc3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,13 +42,6 @@ http_archive( url = "https://github.com/aspect-build/rules_ts/releases/download/v2.0.0/rules_ts-v2.0.0.tar.gz", ) -http_archive( - name = "aspect_rules_jest", - sha256 = "bf8f4a4d2a833e4f96f866c686c38bcee69d3bdae8a827b1c9d2fdf92212bc0b", - strip_prefix = "rules_jest-95d8f1961a9c6f3aee2929881b1b74461652e775", - url = "https://github.com/aspect-build/rules_jest/archive/95d8f1961a9c6f3aee2929881b1b74461652e775.tar.gz", -) - http_archive( name = "aspect_rules_swc", sha256 = "8eb9e42ed166f20cacedfdb22d8d5b31156352eac190fc3347db55603745a2d8", @@ -197,22 +190,6 @@ load("@aspect_rules_ts//ts:repositories.bzl", "rules_ts_dependencies") rules_ts_dependencies(ts_version = "4.9.5") -# rules_jest setup ============================== -load("@aspect_rules_jest//jest:dependencies.bzl", "rules_jest_dependencies") - -rules_jest_dependencies() - -load("@aspect_rules_jest//jest:repositories.bzl", "jest_repositories") - -jest_repositories( - name = "jest", - jest_version = "v28.1.0", -) - -load("@jest//:npm_repositories.bzl", jest_npm_repositories = "npm_repositories") - -jest_npm_repositories() - # rules_swc setup ============================== load("@aspect_rules_swc//swc:dependencies.bzl", "rules_swc_dependencies") diff --git a/babel.config.jest.js b/babel.config.jest.js deleted file mode 100644 index ff9f865af27..00000000000 --- a/babel.config.jest.js +++ /dev/null @@ -1,30 +0,0 @@ -// @ts-check - -// A minimal babel config only for jest transformations. -// All typescript and react transformations are done by previous -// bazel build rules, so we only need to do jest transformations here. - -// TODO(bazel): drop when non-bazel removed. -if (!(process.env.JS_BINARY__TARGET || process.env.BAZEL_BINDIR || process.env.BAZEL_TEST)) { - throw new Error(__filename + ' is only for use with Bazel') -} - -/** @type {import('@babel/core').ConfigFunction} */ -module.exports = api => { - api.cache.forever() - - return { - presets: [ - [ - '@babel/preset-env', - { - targets: { - // We only run jest tests in node. All the browser related transformations - // are already completed on the previous transpilation step. - node: '16', - }, - }, - ], - ], - } -} diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 913fed5a8f6..00000000000 --- a/babel.config.js +++ /dev/null @@ -1,36 +0,0 @@ -// @ts-check - -/** @type {import('@babel/core').ConfigFunction} */ -module.exports = api => { - const isTest = api.env('test') - api.cache.forever() - - /** - * Do no use babel-preset-env for mocha tests transpilation in Bazel. - * This is temporary workaround to allow us to use modern language featurs in `drive.page.evaluate` calls. - */ - const disablePresetEnv = Boolean(process.env.DISABLE_PRESET_ENV && JSON.parse(process.env.DISABLE_PRESET_ENV)) - - return { - presets: [ - ...(disablePresetEnv - ? [] - : [ - [ - '@babel/preset-env', - { - // Node (used for testing) doesn't support modules, so compile to CommonJS for testing. - modules: process.env.BABEL_MODULE ?? (isTest ? 'commonjs' : false), - }, - ], - ]), - ['@babel/preset-typescript', { isTSX: true, allExtensions: true }], - [ - '@babel/preset-react', - { - runtime: 'automatic', - }, - ], - ], - } -} diff --git a/client/BUILD.bazel b/client/BUILD.bazel index 186baa7dde2..c74cedda125 100644 --- a/client/BUILD.bazel +++ b/client/BUILD.bazel @@ -5,7 +5,7 @@ # gazelle:js_files globals.d.ts # Test files, snapshots etc: -# gazelle:js_test_files **/*.{spec,test}.{ts,tsx} +# gazelle:js_test_files **/*.test.{ts,tsx} # gazelle:js_test_files **/mock*.{ts,tsx} # gazelle:js_test_files **/*.{mock,mocks}.{ts,tsx} # gazelle:js_test_files **/mocks/** @@ -16,6 +16,10 @@ # gazelle:js_test_files **/WebStory.{ts,tsx} # TODO(bazel): sveltekit tests # gazelle:exclude **/web-sveltekit/**/*.ts +# gazelle:exclude **/vitest.config.ts + +# Otherwise it gets tripped up on the `declare module 'vitest'` directives to add custom matchers. +# gazelle:js_resolve vitest //:node_modules/vitest # TODO(bazel): put fixtures + testutils + ? into own rules # js_{fixture}_files **/*.{fixture,fixtures}.{ts,tsx} diff --git a/client/app-shell/tsconfig.json b/client/app-shell/tsconfig.json index 04fa32805ef..702217803dd 100644 --- a/client/app-shell/tsconfig.json +++ b/client/app-shell/tsconfig.json @@ -2,10 +2,6 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "module": "esnext", - "baseUrl": ".", - "paths": { - "*": ["src/types/*", "../shared/src/types/*", "../common/src/types/*", "*"], - }, "jsx": "react-jsx", "rootDir": "./src", "outDir": "out", diff --git a/client/branded/BUILD.bazel b/client/branded/BUILD.bazel index 7aa0dd2c6d1..55d56c767dd 100644 --- a/client/branded/BUILD.bazel +++ b/client/branded/BUILD.bazel @@ -1,11 +1,10 @@ load("@npm//:defs.bzl", "npm_link_all_packages") -load("//dev:defs.bzl", "jest_test", "npm_package", "sass", "ts_project") +load("//dev:defs.bzl", "npm_package", "sass", "ts_project", "vitest_test") load("//client/shared/dev:tools.bzl", "module_style_typings") load("//dev:eslint.bzl", "eslint_config_and_lint_root", "eslint_test_with_types") # TODO(bazel): storybook build # gazelle:exclude **/*.story.{ts,tsx} -# gazelle:exclude **/testGlobals.d.ts # gazelle:js_resolve **/*.module.scss :module_style_typings @@ -25,7 +24,6 @@ eslint_test_with_types( ]), config = ":eslint_config", deps = [ - "//:jest_config", # required for import/extensions rule not to fail on the `jest.config.base` import. "//:node_modules/@types/node", ], ) @@ -36,8 +34,6 @@ ts_config( visibility = ["//client:__subpackages__"], deps = [ "//:tsconfig", - "//client/client-api:tsconfig", - "//client/codeintellify:tsconfig", "//client/common:tsconfig", "//client/extension-api-types:tsconfig", "//client/observability-client:tsconfig", @@ -170,7 +166,6 @@ ts_project( tsconfig = ":tsconfig", deps = [ ":module_style_typings", - ":node_modules/@sourcegraph/codeintellify", #keep ":node_modules/@sourcegraph/common", ":node_modules/@sourcegraph/http-client", ":node_modules/@sourcegraph/observability-client", @@ -191,7 +186,6 @@ ts_project( "//:node_modules/@types/react", "//:node_modules/@types/react-dom", "//:node_modules/classnames", - "//:node_modules/comlink", #keep "//:node_modules/copy-to-clipboard", "//:node_modules/date-fns", "//:node_modules/dompurify", @@ -241,7 +235,7 @@ ts_project( "src/search-ui/results/sidebar/SearchFilterSection.test.tsx", "src/search-ui/results/sidebar/helpers.test.ts", "src/search-ui/results/use-items-to-show.test.ts", - "src/testGlobals.d.ts", #keep + "src/testSetup.test.ts", ], tsconfig = ":tsconfig", deps = [ @@ -251,7 +245,6 @@ ts_project( ":node_modules/@sourcegraph/wildcard", "//:node_modules/@codemirror/autocomplete", "//:node_modules/@codemirror/state", - "//:node_modules/@jest/globals", "//:node_modules/@testing-library/jest-dom", #keep "//:node_modules/@testing-library/react", "//:node_modules/@testing-library/user-event", @@ -267,6 +260,7 @@ ts_project( "//:node_modules/react-dom", "//:node_modules/rxjs", "//:node_modules/sinon", + "//:node_modules/vitest", ], ) @@ -279,13 +273,16 @@ npm_package( ], ) -jest_test( +filegroup( + name = "snapshots", + srcs = glob(["src/**/__snapshots__/*"]), +) + +vitest_test( name = "test", timeout = "long", data = [ ":branded_tests", + ":snapshots", ], - patch_node_fs = False, - shard_count = 6, - tags = ["no-sandbox"], ) diff --git a/client/branded/jest.config.js b/client/branded/jest.config.js deleted file mode 100644 index 86b018b7fce..00000000000 --- a/client/branded/jest.config.js +++ /dev/null @@ -1,11 +0,0 @@ -// @ts-check - -/** @type {import('@jest/types').Config.InitialOptions} */ -const config = require('../../jest.config.base') - -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - ...config, - displayName: 'branded', - rootDir: __dirname, -} diff --git a/client/branded/package.json b/client/branded/package.json index 0abcffa7aa1..2d9c3e7c9c1 100644 --- a/client/branded/package.json +++ b/client/branded/package.json @@ -9,15 +9,13 @@ "storybook": "STORIES_GLOB='client/branded/src/**/*.story.tsx' pnpm --filter @sourcegraph/storybook run start", "lint:js": "eslint --cache '**/*.[jt]s?(x)'", "lint:css": "stylelint 'src/**/*.scss' --quiet", - "test": "jest" + "test": "vitest" }, "devDependencies": { "@sourcegraph/extension-api-types": "workspace:*", "@sourcegraph/testing": "workspace:*" }, "dependencies": { - "@sourcegraph/client-api": "workspace:*", - "@sourcegraph/codeintellify": "workspace:*", "@sourcegraph/common": "workspace:*", "@sourcegraph/observability-client": "workspace:*", "@sourcegraph/shared": "workspace:*", diff --git a/client/branded/src/components/Timestamp/Timestamp.test.tsx b/client/branded/src/components/Timestamp/Timestamp.test.tsx index 1d34d1ae295..0140b9829ad 100644 --- a/client/branded/src/components/Timestamp/Timestamp.test.tsx +++ b/client/branded/src/components/Timestamp/Timestamp.test.tsx @@ -1,5 +1,5 @@ -import { describe, expect, test } from '@jest/globals' import { render } from '@testing-library/react' +import { describe, expect, test } from 'vitest' import { Timestamp, TimestampFormat } from './Timestamp' diff --git a/client/branded/src/components/Timestamp/__snapshots__/Timestamp.test.tsx.snap b/client/branded/src/components/Timestamp/__snapshots__/Timestamp.test.tsx.snap index 4b2710a2cfa..74b60b0e6a2 100644 --- a/client/branded/src/components/Timestamp/__snapshots__/Timestamp.test.tsx.snap +++ b/client/branded/src/components/Timestamp/__snapshots__/Timestamp.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Timestamp absolute time with formatting 1`] = ` +exports[`Timestamp > absolute time with formatting 1`] = ` `; -exports[`Timestamp mocked current time 1`] = ` +exports[`Timestamp > mocked current time 1`] = ` - about 22 hours ago + almost 18 years ago `; -exports[`Timestamp noAbout 1`] = ` +exports[`Timestamp > noAbout 1`] = ` - 22 hours ago + almost 18 years ago `; -exports[`Timestamp noAgo 1`] = ` +exports[`Timestamp > noAgo 1`] = ` - about 22 hours + almost 18 years `; -exports[`Timestamp with time time 1`] = ` +exports[`Timestamp > with time time 1`] = ` - about 21 hours ago + almost 18 years ago `; diff --git a/client/branded/src/components/Toggle.test.tsx b/client/branded/src/components/Toggle.test.tsx index c970bb76c8c..7b52e3c90e6 100644 --- a/client/branded/src/components/Toggle.test.tsx +++ b/client/branded/src/components/Toggle.test.tsx @@ -1,7 +1,7 @@ -import { describe, expect, test } from '@jest/globals' import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import sinon from 'sinon' +import { describe, expect, test } from 'vitest' import { Toggle } from './Toggle' diff --git a/client/branded/src/components/__snapshots__/Toggle.test.tsx.snap b/client/branded/src/components/__snapshots__/Toggle.test.tsx.snap index cc0fadb2dc2..18c6b0a50e7 100644 --- a/client/branded/src/components/__snapshots__/Toggle.test.tsx.snap +++ b/client/branded/src/components/__snapshots__/Toggle.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Toggle aria 1`] = ` +exports[`Toggle > aria 1`] = `