Skip to content

Integration Example - Complete Test Setup

← Back to Testing

This example demonstrates how all testing package components work together for a real test scenario. It shows:

  • Importing all major exports from the testing package
  • Checking mock server availability with checkServerHealth()
  • Connecting to mock server using getMockServer()
  • Constructing client configuration using MockServer.baseUrl and DEFAULT_TOKEN
  • Displaying which test data constants can be used with the connected mock server
  • Helpful setup instructions when the server is unavailable This example works with or without a running mock server, providing helpful guidance in either case.
  • No LocalNet required
  • Mock server optional (provides setup guidance if unavailable)

From the repository root:

Terminal window
cd examples
npm run example testing/07-integration-example.ts

View source on GitHub

07-integration-example.ts
/**
* Example: Integration Example - Complete Test Setup
*
* This example demonstrates how all testing package components work together
* for a real test scenario. It shows:
* - Importing all major exports from the testing package
* - Checking mock server availability with checkServerHealth()
* - Connecting to mock server using getMockServer()
* - Constructing client configuration using MockServer.baseUrl and DEFAULT_TOKEN
* - Displaying which test data constants can be used with the connected mock server
* - Helpful setup instructions when the server is unavailable
*
* This example works with or without a running mock server, providing
* helpful guidance in either case.
*
* Prerequisites:
* - No LocalNet required
* - Mock server optional (provides setup guidance if unavailable)
*/
import {
checkServerHealth,
// Configuration constants
DEFAULT_TOKEN,
EXTERNAL_URL_ENV_VARS,
// Mock server connection
getMockServer,
MOCK_PORTS,
// Test data constants (for HAR file matching)
TEST_ADDRESS,
TEST_APP_ID,
TEST_ROUND,
type MockServer,
} from '@algorandfoundation/algokit-utils/testing'
import { printError, printHeader, printInfo, printStep, printSuccess } from '../shared/utils.js'
async function main() {
printHeader('Integration Example - Complete Test Setup')
// Step 1: Display all imported exports
printStep(1, 'All Major Testing Package Exports')
printInfo('This example imports the following from the testing package:')
printInfo('')
printInfo(' Connection utilities:')
printInfo(' - getMockServer // Connect to a mock server')
printInfo(' - checkServerHealth // Check if server is reachable')
printInfo(' - MockServer (type) // Interface for mock server connection')
printInfo('')
printInfo(' Configuration constants:')
printInfo(' - DEFAULT_TOKEN // Token for mock server authentication')
printInfo(' - MOCK_PORTS // Default ports for each server type')
printInfo(' - EXTERNAL_URL_ENV_VARS // Environment variable names')
printInfo('')
printInfo(' Test data constants:')
printInfo(' - TEST_ADDRESS // Pre-recorded test address')
printInfo(' - TEST_APP_ID // Pre-recorded application ID')
printInfo(' - TEST_ROUND // Pre-recorded round number')
// Step 2: Check mock algod server health
printStep(2, 'Checking Mock Algod Server Availability')
const algodEnvVar = EXTERNAL_URL_ENV_VARS.algod
const algodUrl = process.env[algodEnvVar] || `http://localhost:${MOCK_PORTS.algod.host}`
printInfo(`Checking server at: ${algodUrl}`)
printInfo(`Environment variable: ${algodEnvVar}`)
printInfo('')
const isServerAvailable = await checkServerHealth(algodUrl)
if (isServerAvailable) {
printSuccess('Mock algod server is AVAILABLE!')
printInfo('')
// Step 3: Connect using getMockServer
printStep(3, 'Connecting to Mock Algod Server')
printInfo("Using getMockServer('algod') to establish connection...")
printInfo('')
try {
// Set environment variable if not already set (for getMockServer to work)
if (!process.env[algodEnvVar]) {
process.env[algodEnvVar] = algodUrl
}
const server: MockServer = await getMockServer('algod')
printSuccess('Successfully connected!')
printInfo('')
printInfo('MockServer connection details:')
printInfo(` baseUrl: ${server.baseUrl}`)
printInfo(` clientType: ${server.clientType}`)
// Step 4: Show client configuration
printStep(4, 'Client Configuration')
printInfo('Use MockServer.baseUrl and DEFAULT_TOKEN to configure clients:')
printInfo('')
printInfo(' import { AlgodClient } from "@algorandfoundation/algokit-utils/algod-client"')
printInfo('')
printInfo(' const client = new AlgodClient({')
printInfo(` baseUrl: "${server.baseUrl}",`)
printInfo(` token: "${DEFAULT_TOKEN}",`)
printInfo(' })')
printInfo('')
printInfo('Configuration values:')
printInfo(` MockServer.baseUrl: ${server.baseUrl}`)
printInfo(` DEFAULT_TOKEN: ${DEFAULT_TOKEN}`)
// Step 5: Show test data constants
printStep(5, 'Test Data Constants for Mock Server')
printInfo('The following test data constants match HAR file recordings:')
printInfo('')
printInfo(' TEST_ADDRESS:')
printInfo(` ${TEST_ADDRESS}`)
printInfo('')
printInfo(' TEST_APP_ID:')
printInfo(` ${TEST_APP_ID}`)
printInfo('')
printInfo(' TEST_ROUND:')
printInfo(` ${TEST_ROUND}`)
printInfo('')
printInfo('Use these constants in your tests to match pre-recorded responses.')
printInfo('The mock server returns deterministic data for these values.')
// Step 6: Summary for connected state
printStep(6, 'Integration Complete')
printInfo('You now have:')
printInfo(' 1. A connected MockServer instance')
printInfo(' 2. Configuration ready for AlgodClient')
printInfo(' 3. Test data constants for deterministic testing')
printInfo('')
printInfo('Next steps:')
printInfo(' - Create an AlgodClient with the configuration above')
printInfo(' - Use test data constants in your test assertions')
printInfo(' - See other examples for global setup in Vitest')
printSuccess('Integration example completed successfully!')
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error)
printError(`Connection failed: ${errorMessage}`)
}
} else {
// Server is NOT available - provide helpful setup instructions
printError('Mock algod server is NOT AVAILABLE')
printInfo('')
// Step 3: Setup instructions
printStep(3, 'Setup Instructions for Local Development')
printInfo('To run the mock server locally, you have several options:')
printInfo('')
printInfo('Option 1: Using algokit-polytest CLI')
printInfo(' npm install -g algokit-polytest')
printInfo(' algokit-polytest serve')
printInfo('')
printInfo('Option 2: Set environment variable to external server')
printInfo(` export ${algodEnvVar}=<your-mock-server-url>`)
printInfo('')
printInfo('Default local ports:')
printInfo(` Algod: http://localhost:${MOCK_PORTS.algod.host}`)
printInfo(` Indexer: http://localhost:${MOCK_PORTS.indexer.host}`)
printInfo(` KMD: http://localhost:${MOCK_PORTS.kmd.host}`)
// Step 4: What you can still do without a server
printStep(4, 'What You Can Do Without a Running Server')
printInfo('Even without a mock server running, you can:')
printInfo('')
printInfo(' 1. View configuration constants:')
printInfo(` DEFAULT_TOKEN = "${DEFAULT_TOKEN}"`)
printInfo(` MOCK_PORTS.algod.host = ${MOCK_PORTS.algod.host}`)
printInfo('')
printInfo(' 2. View test data constants:')
printInfo(` TEST_ADDRESS = "${TEST_ADDRESS.slice(0, 20)}..."`)
printInfo(` TEST_APP_ID = ${TEST_APP_ID}`)
printInfo(` TEST_ROUND = ${TEST_ROUND}`)
printInfo('')
printInfo(' 3. Set up Vitest global setup (starts server automatically):')
printInfo(' See examples 05-global-setup-factory.ts and')
printInfo(' 06-prebuilt-global-setups.ts for details.')
// Step 5: Reference to README
printStep(5, 'Documentation Reference')
printInfo('For complete setup instructions, see:')
printInfo(' - packages/testing/README.md (mock server section)')
printInfo(' - https://github.com/algorandfoundation/algokit-utils-ts')
printInfo('')
printInfo('The README contains:')
printInfo(' - Prerequisites and installation steps')
printInfo(' - Environment variable configuration')
printInfo(' - Vitest integration examples')
printInfo(' - Troubleshooting tips')
printSuccess('Integration example completed (server unavailable mode)!')
}
}
main().catch(console.error)