温馨提示:本站仅提供公开网络链接索引服务,不存储、不篡改任何第三方内容,所有内容版权归原作者所有
AI智能索引来源:http://www.bun.com/docs/guides/test/concurrent-test-glob
点击访问原文链接

Selectively run tests concurrently with glob patterns - Bun

Selectively run tests concurrently with glob patterns - BunSkip to main contentBun home pageSearch...⌘KInstall BunSearch...NavigationTest RunnerSelectively run tests concurrently with glob patternsRuntimePackage ManagerBundlerTest RunnerGuidesReferenceBlogFeedbackdiv:first-child]:!hidden peer-[.is-custom]:[&>div:first-child]:sm:!hidden peer-[.is-custom]:[&>div:first-child]:md:!hidden peer-[.is-custom]:[&>div:first-child]:lg:!hidden peer-[.is-custom]:[&>div:first-child]:xl:!hidden">OverviewGuidesDeploymentDeploy on VercelDeploy on RailwayDeploy on RenderDeploy on AWS LambdaDeploy on DigitalOceanDeploy on Google Cloud RunRuntime & DebuggingTypeScript typesRe-map import pathsVS Code debuggerWeb debuggerHeap snapshotsBuild-time constantsDefine constantsGitHub ActionsCodesign on macOSUtilitiesUpgrade BunDetect BunGet Bun versionHash passwordGenerate UUIDBase64 encodingGzip compressionDEFLATE compressionEscape HTMLDeep equalitySleepFile URL to pathPath to file URLFind executable pathimport.meta.dirimport.meta.fileimport.meta.pathCheck entrypointGet entrypoint pathEcosystem & FrameworksAstro with BunDiscord.js with BunDocker with BunDrizzle with BunGel with BunElysia with BunExpress with BunHono with BunMongoose with BunNeon Drizzle with BunNeon Serverless Postgres with BunNext.js with BunNuxt with BunPM2 with BunPrisma ORM with BunPrisma Postgres with BunQwik with BunReact with BunRemix with BunTanStack Start with BunSentry with BunSolidStart with BunSSR React with BunStricJS with BunSvelteKit with Bunsystemd with BunVite with BunUpstash with BunHTTP & NetworkingHTTP Server with BunSimple HTTP Server with BunFetch with BunHot reload an HTTP serverStart a cluster of HTTP serversConfigure TLSProxy HTTP requests using fetch()Stream file responseUpload files via HTTP using FormDataFetch with unix domain socketsStream with iteratorsServer-Sent EventsStream with Node.jsWebSocketSimple serverPub-sub serverContextual dataEnable compressionProcesses & SystemSpawn child processRead stdoutRead stderrParse command-line argumentsRead from stdinSpawn a child process and communicate using IPCListen for CTRL+COS signalsProcess uptimeRun shell commandSet time zoneSet env variablesRead env variablesPackage ManagerAdd a dependencyAdd a dev dependencyAdd an optional dependencyAdd a peer dependencyAdd a Git dependencyAdd a tarball dependencyInstall with aliasWorkspaces with BunOverride the default npm registryConfigure a scoped registryAzure Artifacts with BunJFrog Artifactory with BunAdd a trusted dependencyGenerate a yarn-compatible lockfileMigrate from npm to bunConfigure git to diff Bun's lockfileInstall Bun in GitHub ActionsTest RunnerRun testsWatch modeMigrate from JestMock functionsSpy on methodsMock system timeSnapshot testingUpdate snapshotsCoverage reportsCoverage thresholdConcurrent test globSkip testsTodo testsTest timeoutBail earlyRe-run testsTesting LibraryDOM testsTest SvelteRuntime & DebuggingVS Code debuggerWeb debuggerHeap snapshotsBuild-time constantsDefine constantsGitHub ActionsCodesign on macOSModule SystemImport JSONImport TOMLImport YAMLImport JSON5Import HTMLimport.meta.dirimport.meta.fileimport.meta.pathCheck entrypointGet entrypoint pathFile SystemRead as stringRead to BufferRead to Uint8ArrayRead to ArrayBufferRead JSON fileGet MIME typeCheck file existsWatch directoryRead as streamWrite string to fileWrite BlobWrite ResponseAppend to fileIncremental writeWrite streamWrite to stdoutWrite file to stdoutCopy fileDelete fileDelete filesDelete directoriesUtilitiesHash passwordGenerate UUIDBase64 encodingGzip compressionDEFLATE compressionEscape HTMLDeep equalitySleepFile URL to pathPath to file URLFind executable pathHTML ProcessingExtract links using HTMLRewriterOpenGraph tagsBinary DataArrayBuffer to stringArrayBuffer to BufferArrayBuffer to BlobArrayBuffer to ArrayArrayBuffer to Uint8ArrayBuffer to stringBuffer to ArrayBufferBuffer to BlobBuffer to Uint8ArrayBuffer to ReadableStreamBlob to stringBlob to ArrayBufferBlob to Uint8ArrayBlob to DataViewBlob to ReadableStreamUint8Array to stringUint8Array to ArrayBufferUint8Array to BufferUint8Array to BlobUint8Array to DataViewUint8Array to ReadableStreamDataView to stringStreamsStream to stringStream to JSONStream to BlobStream to BufferStream to ArrayBufferStream to Uint8ArrayStream to arrayReadable to stringReadable to JSONReadable to BlobReadable to Uint8ArrayReadable to ArrayBufferTest RunnerSelectively run tests concurrently with glob patternsCopy pagespan]:line-clamp-1 overflow-hidden group flex items-center py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border px-3 border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5" aria-label="More actions" type="button" id="radix-_R_2shjinpfd9rqaabsnpfdb_" aria-haspopup="menu" aria-expanded="false" data-state="closed">*]:[overflow-wrap:anywhere]">Set a glob pattern to decide which tests from which files run in parallel

Copy pagespan]:line-clamp-1 overflow-hidden group flex items-center py-0.5 gap-1 text-sm text-gray-950/50 dark:text-white/50 group-hover:text-gray-950/70 dark:group-hover:text-white/70 rounded-none rounded-r-xl border px-3 border-gray-200 aspect-square dark:border-white/[0.07] bg-background-light dark:bg-background-dark hover:bg-gray-600/5 dark:hover:bg-gray-200/5" aria-label="More actions" type="button" id="radix-_R_5hjinpfd9rqaabsnpfdb_" aria-haspopup="menu" aria-expanded="false" data-state="closed">This guide demonstrates how to use the concurrentTestGlob option to selectively run tests concurrently based on file naming patterns. ​Project Structure Project StructureCopymy-project/ ├── bunfig.toml ├── tests/ │ ├── unit/ │ │ ├── math.test.ts # Sequential │ │ └── utils.test.ts # Sequential │ └── integration/ │ ├── concurrent-api.test.ts # Concurrent │ └── concurrent-database.test.ts # Concurrent ​Configuration Configure your bunfig.toml to run test files with “concurrent-” prefix concurrently: bunfig.tomlCopy[test] # Run all test files with "concurrent-" prefix concurrently concurrentTestGlob = "**/concurrent-*.test.ts" ​Test Files ​Unit Test (Sequential) Sequential tests are good for tests that share state or have specific ordering requirements: tests/unit/math.test.tsCopyimport { test, expect } from "bun:test"; // These tests run sequentially by default let sharedState = 0; test("addition", () => { sharedState = 5 + 3; expect(sharedState).toBe(8); }); test("uses previous state", () => { // This test depends on the previous test's state expect(sharedState).toBe(8); }); ​Integration Test (Concurrent) Tests in files matching the glob pattern automatically run concurrently: tests/integration/concurrent-api.test.tsCopyimport { test, expect } from "bun:test"; // These tests automatically run concurrently due to filename matching the glob pattern. // Using test() is equivalent to test.concurrent() when the file matches concurrentTestGlob. // Each test is independent and can run in parallel. test("fetch user data", async () => { const response = await fetch("/api/user/1"); expect(response.ok).toBe(true); }); // can also use test.concurrent() for explicitly marking it as concurrent test.concurrent("fetch posts", async () => { const response = await fetch("/api/posts"); expect(response.ok).toBe(true); }); // can also use test.serial() for explicitly marking it as sequential test.serial("fetch comments", async () => { const response = await fetch("/api/comments"); expect(response.ok).toBe(true); }); ​Running Tests terminalCopy# Run all tests - concurrent-*.test.ts files will run concurrently bun test # Override: Force ALL tests to run concurrently # Note: This overrides bunfig.toml and runs all tests concurrently, regardless of glob bun test --concurrent # Run only unit tests (sequential) bun test tests/unit # Run only integration tests (concurrent due to glob pattern) bun test tests/integration ​Benefits Gradual Migration: Migrate to concurrent tests file by file by renaming them Clear Organization: File naming convention indicates execution mode Performance: Integration tests run faster in parallel Safety: Unit tests remain sequential where needed Flexibility: Easy to change execution mode by renaming files ​Migration Strategy To migrate existing tests to concurrent execution: Start with independent integration tests - These typically don’t share state Rename files to match the glob pattern: mv api.test.ts concurrent-api.test.ts Verify tests still pass - Run bun test to ensure no race conditions Monitor for shared state issues - Watch for flaky tests or unexpected failures Continue migrating stable tests incrementally - Don’t rush the migration ​Tips Use descriptive prefixes: concurrent-, parallel-, async- Keep related sequential tests together in the same directory Document why certain tests must remain sequential with comments Use test.concurrent() for fine-grained control in sequential files (Note: In files matched by concurrentTestGlob, plain test() already runs concurrently) ​Multiple Patterns You can specify multiple patterns for different test categories: bunfig.tomlCopy[test] concurrentTestGlob = [ "**/integration/*.test.ts", "**/e2e/*.test.ts", "**/concurrent-*.test.ts" ] This configuration will run tests concurrently if they match any of these patterns: All tests in integration/ directories All tests in e2e/ directories All tests with concurrent- prefix anywhere in the project

Was this page helpful?

YesNoSuggest editsRaise issueSet a code coverage threshold with the Bun test runnerPreviousSkip tests with the Bun test runnerNext⌘IxgithubdiscordyoutubePowered by

智能索引记录