Test And Fix
Run tests and automatically fix common issues
Claude CodeGeneric
---
description: "Run tests and automatically fix common issues"
---
You are running tests and fixing any issues found. This command iteratively tests, diagnoses problems, fixes them, and retests.
## Related Skills
- [testing.md](../skills/ext/solana-dev/skill/references/testing.md) - Testing strategy details
- [security.md](../skills/ext/solana-dev/skill/references/security.md) - Security fix patterns
## Overview
This command follows a **test → diagnose → fix → retest** loop until all tests pass or manual intervention is needed.
## Step 1: Initial Test Run
```bash
echo "🧪 Running initial tests..."
# Determine project type and run appropriate tests
if [ -f "Anchor.toml" ]; then
# Anchor project
anchor build && anchor test --skip-deploy
TEST_STATUS=$?
elif grep -q "solana-program" Cargo.toml 2>/dev/null; then
# Native Solana program
cargo build-sbf && cargo test
TEST_STATUS=$?
else
# Standard Rust or backend
cargo test
TEST_STATUS=$?
fi
if [ $TEST_STATUS -eq 0 ]; then
echo "✅ All tests passed!"
exit 0
fi
echo "❌ Tests failed. Starting diagnosis..."
Step 2: Diagnose Issues
Analyze the test output to categorize failures:
Common Issue Categories
Format Issues
- Code not formatted
- Inconsistent style
Clippy Warnings
- Lints not satisfied
- Potential bugs
Compilation Errors
- Syntax errors
- Type mismatches
- Missing imports
Test Failures
- Failed assertions
- Logic errors
- Account validation failures (Solana)
Runtime Errors
- Panics
- Arithmetic overflow
- Account errors (Solana)
Step 3: Automatic Fixes
Fix Format Issues
# Always start with formatting
echo "📝 Fixing format issues..."
cargo fmt
# For TypeScript tests
if [ -d "tests" ] && ls tests/*.ts >/dev/null 2>&1; then
npx prettier --write "tests/**/*.ts"
fi
echo "✅ Format fixed"
Fix Clippy Warnings (Auto-fixable)
echo "🔧 Fixing clippy warnings..."
# Apply automatic clippy fixes
cargo clippy --fix --allow-dirty --allow-staged
# Note: Not all clippy warnings are auto-fixable
# Manual fixes may be needed for:
# - Logic issues
# - Unsafe code
# - Complex refactorings
echo "✅ Clippy auto-fixes applied"
Fix Common Solana Issues
Missing Account in Anchor Test
# If test fails with "Missing account: system_program"
# Add to test accounts:
# systemProgram: anchor.web3.SystemProgram.programId,
Account Not Mutable
# If error: "Account not mutable"
# Update account definition to include 'mut':
# #[account(mut)]
Insufficient Compute Units
# If error: "Exceeded CU limit"
# Add compute budget instruction in test:
# .preInstructions([
# ComputeBudgetProgram.setComputeUnitLimit({ units: 400000 })
# ])
Step 4: Rerun Tests
echo "🔄 Retesting after fixes..."
# Run tests again
if [ -f "Anchor.toml" ]; then
anchor test --skip-deploy
TEST_STATUS=$?
elif grep -q "solana-program" Cargo.toml 2>/dev/null; then
cargo test
TEST_STATUS=$?
else
cargo test
TEST_STATUS=$?
fi
if [ $TEST_STATUS -eq 0 ]; then
echo "✅ All tests now pass!"
exit 0
fi
Step 5: Manual Fix Guidance
If automatic fixes didn't resolve all issues, provide guidance:
echo "⚠️ Manual fixes needed. Analyzing failures..."
# Parse test output for specific errors
# This is where AI assistance helps diagnose complex issues
Solana-Specific Manual Fixes
Account Validation Failures
// Error: "A has_one constraint was violated"
// Fix: Ensure account relationships match constraints
#[account(
mut,
has_one = authority @ ErrorCode::Unauthorized, // authority must match
)]
pub vault: Account<'info, Vault>,
PDA Derivation Mismatch
// Error: "Invalid PDA seed"
// Fix: Verify seeds match between program and test
// Program:
seeds = [b"vault", authority.key().as_ref()]
// Test:
const [vaultPda] = PublicKey.findProgramAddressSync(
[Buffer.from("vault"), authority.publicKey.toBuffer()],
programId
);
Arithmetic Overflow
// Error: "Arithmetic overflow"
// Fix: Use checked arithmetic
// Bad:
vault.balance = vault.balance + amount;
// Good:
vault.balance = vault
.balance
.checked_add(amount)
.ok_or(ErrorCode::Overflow)?;
Missing Signer
// Error: "Missing required signature"
// Fix: Ensure account is marked as Signer
#[account(mut)]
pub authority: Signer<'info>, // Must be Signer, not SystemAccount
Backend Service Manual Fixes
Async/Await Issues
// Error: "Cannot call blocking function in async context"
// Fix: Use async version or spawn_blocking
// Bad:
async fn handler() -> Result<String> {
std::fs::read_to_string("file.txt")? // Blocking!
}
// Good:
async fn handler() -> Result<String> {
tokio::fs::read_to_string("file.txt").await?
}
Database Connection Issues
// Error: "Connection pool exhausted"
// Fix: Increase pool size or close connections properly
let pool = PgPoolOptions::new()
.max_connections(50) // Increase if needed
.connect(&database_url)
.await?;
Step 6: Iterative Fixing
# Maximum fix iterations
MAX_ITERATIONS=5
ITERATION=1
while [ $ITERATION -le $MAX_ITERATIONS ]; do
echo "🔄 Fix iteration $ITERATION/$MAX_ITERATIONS"
# Apply automatic fixes
cargo fmt
cargo clippy --fix --allow-dirty --allow-staged
# Run tests
if [ -f "Anchor.toml" ]; then
anchor test --skip-deploy
else
cargo test
fi
if [ $? -eq 0 ]; then
echo "✅ All tests pass after $ITERATION iteration(s)!"
exit 0
fi
ITERATION=$((ITERATION + 1))
# If still failing after max iterations, need manual intervention
if [ $ITERATION -gt $MAX_ITERATIONS ]; then
echo "⚠️ Maximum iterations reached. Manual fixes required."
echo "Please review the test ou
Maintain Test And Fix?
Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.
[Test And Fix on getagentictools](https://getagentictools.com/loops/solanabr-determine-project-type-and-run-appropriate-tests?ref=badge)