5.5 KiB
5.5 KiB
Smart Accounts Testing Guide
Date: 2026-01-26
Network: ChainID 138 (SMOM-DBIS-138)
Overview
This guide explains how to test Smart Accounts Kit integration on ChainID 138.
Test Structure
Unit Tests (Foundry)
Located in test/smart-accounts/:
test/smart-accounts/
├── AccountWalletRegistryExtendedTest.t.sol # Extended registry tests
└── (Additional test files to be created)
Integration Tests (TypeScript/JavaScript)
Located in test/:
test/
└── smart-accounts-integration.test.ts # Integration tests
Running Tests
Unit Tests (Foundry)
# Run all Smart Accounts tests
forge test --match-path test/smart-accounts/** -vv
# Run specific test file
forge test --match-path test/smart-accounts/AccountWalletRegistryExtendedTest.t.sol -vv
# Run with gas reporting
forge test --match-path test/smart-accounts/** --gas-report
# Run with coverage
forge coverage --match-path test/smart-accounts/**
Integration Tests
# Install dependencies
npm install
# Run integration tests
npm test
# Run with coverage
npm test -- --coverage
Test Categories
1. Unit Tests
AccountWalletRegistryExtended:
- Link smart account
- Check if smart account
- Support both EOA and smart accounts
- Role-based access control
- Factory and EntryPoint configuration
Run:
forge test --match-contract AccountWalletRegistryExtendedTest -vv
2. Integration Tests
Smart Account Creation:
- Create smart account
- Create with salt
- Verify address format
Delegation:
- Request delegation
- Check delegation status
- Revoke delegation
- Test expiry
Advanced Permissions:
- Request permission
- Check permission
- Revoke permission
User Operations:
- Batch operations
- Execute batch
- Gas estimation
Run:
npm test -- smart-accounts-integration
3. End-to-End Tests
Complete Flows:
- Create smart account → Link to fiat account → Use for payment rails
- Create smart account → Grant delegation → dApp executes transactions
- Create smart account → Grant permissions → Execute functions
Run:
npm test -- e2e
Writing Tests
Foundry Test Example
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {AccountWalletRegistryExtended} from "../../contracts/smart-accounts/AccountWalletRegistryExtended.sol";
contract MyTest is Test {
AccountWalletRegistryExtended public registry;
function setUp() public {
// Setup test environment
registry = new AccountWalletRegistryExtended(...);
}
function test_myFunction() public {
// Arrange
// Act
// Assert
}
}
Integration Test Example
import { SmartAccountsKit } from '@metamask/smart-accounts-kit';
describe('My Feature', () => {
it('should work correctly', async () => {
const kit = new SmartAccountsKit({ ... });
const result = await kit.someFunction();
expect(result).toBeDefined();
});
});
Test Data
Test Addresses
const TEST_ADDRESSES = {
admin: '0x...',
accountManager: '0x...',
smartAccountFactory: '0x...',
entryPoint: '0x...',
testUser: '0x...',
testSmartAccount: '0x...',
};
Test Configuration
const TEST_CONFIG = {
chainId: 138,
rpcUrl: process.env.RPC_URL_138 || 'http://192.168.11.211:8545',
entryPointAddress: process.env.ENTRY_POINT || '0x...',
accountFactoryAddress: process.env.ACCOUNT_FACTORY || '0x...',
};
Test Coverage Goals
Unit Tests
- ✅ AccountWalletRegistryExtended: 100%
- ⏳ Smart Account creation: 90%+
- ⏳ Delegation framework: 90%+
- ⏳ Advanced Permissions: 90%+
Integration Tests
- ⏳ Smart Account creation: 100%
- ⏳ Delegation flows: 100%
- ⏳ Permission flows: 100%
- ⏳ User operations: 100%
End-to-End Tests
- ⏳ Complete payment rail flow: 100%
- ⏳ Complete dApp interaction flow: 100%
- ⏳ Hybrid EOA + smart account flow: 100%
Continuous Integration
GitHub Actions Example
name: Smart Accounts Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: foundry-actions/setup-foundry@v1
- run: forge test --match-path test/smart-accounts/**
- run: npm test
Debugging Tests
Foundry Debugging
# Run with maximum verbosity
forge test --match-path test/smart-accounts/** -vvvv
# Run specific test
forge test --match-test test_linkSmartAccount -vvvv
# Use debugger
forge test --debug test_linkSmartAccount
Integration Test Debugging
# Run with debug output
DEBUG=* npm test
# Run single test
npm test -- --testNamePattern="should create smart account"
Best Practices
1. Test Isolation
- Each test should be independent
- Use
setUp()for common setup - Clean up after tests
2. Test Coverage
- Aim for 90%+ coverage
- Test happy paths
- Test error cases
- Test edge cases
3. Test Naming
- Use descriptive names
- Follow pattern:
test_<functionality> - Group related tests
4. Assertions
- Use specific assertions
- Check return values
- Verify events emitted
- Check state changes
Resources
Last Updated: 2026-01-26