Pre-built Global Setups
Description
Section titled “Description”This example demonstrates the pre-built global setup functions available for common client types and how to use them in Vitest configuration. It shows:
- algodGlobalSetup, indexerGlobalSetup, and kmdGlobalSetup imports
- How these are pre-configured setup functions ready to use
- Example vitest.config.ts configurations for each setup
- Example tests/globalSetup.ts files that re-export the setup
- The difference between pre-built setups and createGlobalSetup() NOTE: This example documents usage patterns without invoking setups (no running server needed). The setup functions are designed for use in vitest.config.ts, not direct invocation.
Prerequisites
Section titled “Prerequisites”- No LocalNet required
Run This Example
Section titled “Run This Example”From the repository root:
cd examplesnpm run example testing/06-prebuilt-global-setups.ts/** * Example: Pre-built Global Setups * * This example demonstrates the pre-built global setup functions available for * common client types and how to use them in Vitest configuration. It shows: * - algodGlobalSetup, indexerGlobalSetup, and kmdGlobalSetup imports * - How these are pre-configured setup functions ready to use * - Example vitest.config.ts configurations for each setup * - Example tests/globalSetup.ts files that re-export the setup * - The difference between pre-built setups and createGlobalSetup() * * NOTE: This example documents usage patterns without invoking setups * (no running server needed). The setup functions are designed for use in * vitest.config.ts, not direct invocation. * * Prerequisites: * - No LocalNet required */
import { algodGlobalSetup, createGlobalSetup, indexerGlobalSetup, kmdGlobalSetup,} from '@algorandfoundation/algokit-utils/testing'import { printHeader, printInfo, printStep, printSuccess } from '../shared/utils.js'
function main() { printHeader('Pre-built Global Setups Example')
// Step 1: Import pre-built global setups printStep(1, 'Importing Pre-built Global Setups') printInfo('The testing package exports three pre-built global setup functions:') printInfo('') printInfo(' import {') printInfo(' algodGlobalSetup,') printInfo(' indexerGlobalSetup,') printInfo(' kmdGlobalSetup,') printInfo(' } from "@algorandfoundation/algokit-utils/testing"') printInfo('') printInfo('These are pre-configured setup functions ready to use in Vitest.') printInfo('') printInfo('Verifying imports are functions:') printInfo(` algodGlobalSetup: ${typeof algodGlobalSetup}`) printInfo(` indexerGlobalSetup: ${typeof indexerGlobalSetup}`) printInfo(` kmdGlobalSetup: ${typeof kmdGlobalSetup}`)
// Step 2: Explain algodGlobalSetup printStep(2, 'algodGlobalSetup - Mock Algod Server') printInfo('algodGlobalSetup connects to the mock algod server.') printInfo('') printInfo('What it does:') printInfo(' - Reads MOCK_ALGOD_URL from environment (default: http://localhost:8000)') printInfo(' - Verifies the mock algod server is reachable') printInfo(' - Returns a teardown function for cleanup') printInfo('') printInfo('The mock algod server provides:') printInfo(' - Transaction submission and status endpoints') printInfo(' - Account information queries') printInfo(' - Application state queries') printInfo(' - Block information')
// Step 3: Explain indexerGlobalSetup printStep(3, 'indexerGlobalSetup - Mock Indexer Server') printInfo('indexerGlobalSetup connects to the mock indexer server.') printInfo('') printInfo('What it does:') printInfo(' - Reads MOCK_INDEXER_URL from environment (default: http://localhost:8002)') printInfo(' - Verifies the mock indexer server is reachable') printInfo(' - Returns a teardown function for cleanup') printInfo('') printInfo('The mock indexer server provides:') printInfo(' - Historical transaction search') printInfo(' - Account transaction history') printInfo(' - Asset and application lookups') printInfo(' - Block search capabilities')
// Step 4: Explain kmdGlobalSetup printStep(4, 'kmdGlobalSetup - Mock KMD Server') printInfo('kmdGlobalSetup connects to the mock kmd server.') printInfo('') printInfo('What it does:') printInfo(' - Reads MOCK_KMD_URL from environment (default: http://localhost:8001)') printInfo(' - Verifies the mock kmd server is reachable') printInfo(' - Returns a teardown function for cleanup') printInfo('') printInfo('The mock kmd server provides:') printInfo(' - Wallet management (create, list, delete)') printInfo(' - Key management within wallets') printInfo(' - Transaction signing') printInfo(' - Key import/export')
// Step 5: Show example vitest.config.ts for algod printStep(5, 'Example vitest.config.ts for Algod') printInfo('For testing with the algod mock server:') printInfo('') printInfo(' // vitest.config.ts') printInfo(' import { defineConfig } from "vitest/config"') printInfo('') printInfo(' export default defineConfig({') printInfo(' test: {') printInfo(' globalSetup: "./tests/globalSetup.ts",') printInfo(' },') printInfo(' })') printInfo('') printInfo(' // tests/globalSetup.ts') printInfo(' import { algodGlobalSetup } from "@algorandfoundation/algokit-utils/testing"') printInfo(' export default algodGlobalSetup')
// Step 6: Show example vitest.config.ts for indexer printStep(6, 'Example vitest.config.ts for Indexer') printInfo('For testing with the indexer mock server:') printInfo('') printInfo(' // vitest.config.ts') printInfo(' import { defineConfig } from "vitest/config"') printInfo('') printInfo(' export default defineConfig({') printInfo(' test: {') printInfo(' globalSetup: "./tests/globalSetup.ts",') printInfo(' },') printInfo(' })') printInfo('') printInfo(' // tests/globalSetup.ts') printInfo(' import { indexerGlobalSetup } from "@algorandfoundation/algokit-utils/testing"') printInfo(' export default indexerGlobalSetup')
// Step 7: Show example vitest.config.ts for kmd printStep(7, 'Example vitest.config.ts for KMD') printInfo('For testing with the kmd mock server:') printInfo('') printInfo(' // vitest.config.ts') printInfo(' import { defineConfig } from "vitest/config"') printInfo('') printInfo(' export default defineConfig({') printInfo(' test: {') printInfo(' globalSetup: "./tests/globalSetup.ts",') printInfo(' },') printInfo(' })') printInfo('') printInfo(' // tests/globalSetup.ts') printInfo(' import { kmdGlobalSetup } from "@algorandfoundation/algokit-utils/testing"') printInfo(' export default kmdGlobalSetup')
// Step 8: Show example globalSetup.ts re-export pattern printStep(8, 'Re-export Pattern in globalSetup.ts') printInfo('The recommended pattern is to create a globalSetup.ts file that re-exports:') printInfo('') printInfo(' // tests/globalSetup.ts - Simple re-export') printInfo(' import { algodGlobalSetup } from "@algorandfoundation/algokit-utils/testing"') printInfo(' export default algodGlobalSetup') printInfo('') printInfo('This pattern allows you to:') printInfo(' - Keep vitest.config.ts clean and focused') printInfo(' - Easily switch between different mock servers') printInfo(' - Add custom setup logic if needed later') printInfo('') printInfo('For multiple servers, combine setups:') printInfo('') printInfo(' // tests/globalSetup.ts - Combined setup') printInfo(' import { algodGlobalSetup, indexerGlobalSetup } from "@algorandfoundation/algokit-utils/testing"') printInfo('') printInfo(' export default async function setup() {') printInfo(' const teardownAlgod = await algodGlobalSetup()') printInfo(' const teardownIndexer = await indexerGlobalSetup()') printInfo(' return async () => {') printInfo(' await teardownAlgod()') printInfo(' await teardownIndexer()') printInfo(' }') printInfo(' }')
// Step 9: Difference between pre-built setups and createGlobalSetup() printStep(9, 'Pre-built Setups vs createGlobalSetup()') printInfo('Understanding when to use each approach:') printInfo('') printInfo('PRE-BUILT SETUPS (algodGlobalSetup, indexerGlobalSetup, kmdGlobalSetup):') printInfo(' - Ready to use with no configuration') printInfo(' - Simply import and re-export') printInfo(' - Best for most common use cases') printInfo(' - Equivalent to createGlobalSetup("algod"), etc.') printInfo('') printInfo('createGlobalSetup(clientType):') printInfo(' - Factory function for creating custom setups') printInfo(' - Useful when you need programmatic control') printInfo(' - Can be used to create setups dynamically') printInfo(' - Example: createGlobalSetup(process.env.CLIENT_TYPE as ClientType)') printInfo('') printInfo('Equivalence:') printInfo(' algodGlobalSetup === createGlobalSetup("algod")') printInfo(' indexerGlobalSetup === createGlobalSetup("indexer")') printInfo(' kmdGlobalSetup === createGlobalSetup("kmd")') printInfo('') printInfo('Verifying equivalence (both create functions):') printInfo(` Pre-built algodGlobalSetup: ${typeof algodGlobalSetup}`) printInfo(` createGlobalSetup("algod"): ${typeof createGlobalSetup('algod')}`)
// Summary printStep(10, 'Summary') printInfo('Key takeaways for using pre-built global setups:') printInfo('') printInfo(' 1. Import the setup you need:') printInfo(' - algodGlobalSetup for algod mock server') printInfo(' - indexerGlobalSetup for indexer mock server') printInfo(' - kmdGlobalSetup for kmd mock server') printInfo('') printInfo(' 2. Create tests/globalSetup.ts and re-export the setup') printInfo('') printInfo(' 3. Point vitest.config.ts to your globalSetup.ts') printInfo('') printInfo(' 4. Use createGlobalSetup() only when you need:') printInfo(' - Dynamic client type selection') printInfo(' - Programmatic setup configuration') printInfo('') printInfo(' 5. Combine multiple setups by calling them in sequence')
printSuccess('Pre-built global setups example completed!')}
main()