aztec-e2e-testing

critesjosh's avatarfrom critesjosh

Generate Jest end-to-end tests for Aztec contracts with real network interaction. Use when writing integration tests, testing contract deployments, or validating full transaction flows.

⭐0stars🔀0forks📁View on GitHub🕐Updated Jan 8, 2026

When & Why to Use This Skill

This Claude skill automates the generation of Jest end-to-end (E2E) tests for Aztec smart contracts, enabling developers to validate contract deployments, transaction flows, and fee payments against real network environments. It bridges the gap between simulated Noir tests and production readiness by ensuring robust integration and real-world network interaction.

Use Cases

  • Case 1: Generating comprehensive integration tests to verify complex interactions between multiple Aztec smart contracts on a live devnet.
  • Case 2: Validating fee payment mechanisms and sponsored transaction logic to ensure economic models work correctly before mainnet deployment.
  • Case 3: Automating the setup of test wallets and contract deployment scripts for consistent and repeatable CI/CD testing pipelines.
  • Case 4: Verifying real proof generation and persistent state behavior to identify edge cases that are often missed in simulated testing environments.
nameaztec-e2e-testing
descriptionGenerate Jest end-to-end tests for Aztec contracts with real network interaction. Use when writing integration tests, testing contract deployments, or validating full transaction flows.
allowed-toolsRead, Grep, Glob, Edit, Write, Bash

Aztec E2E Testing Skill

Generate Jest end-to-end tests for Aztec contracts against live networks.

Subskills

Quick Start: Basic E2E Test

import { MyContract } from "../../artifacts/MyContract.js";
import { SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee/testing';
import { setupWallet } from "../../utils/setup_wallet.js";
import { getSponsoredFPCInstance } from "../../utils/sponsored_fpc.js";
import { SponsoredFPCContract } from "@aztec/noir-contracts.js/SponsoredFPC";
import { Fr, GrumpkinScalar } from "@aztec/aztec.js/fields";
import { AztecAddress } from "@aztec/stdlib/aztec-address";
import { TxStatus } from "@aztec/stdlib/tx";
import { TestWallet } from '@aztec/test-wallet/server';
import { AccountManager } from "@aztec/aztec.js/wallet";
import { getTimeouts } from "../../../config/config.js";

describe("MyContract", () => {
    let wallet: TestWallet;
    let account: AccountManager;
    let contract: MyContract;
    let paymentMethod: SponsoredFeePaymentMethod;

    beforeAll(async () => {
        // Setup wallet
        wallet = await setupWallet();

        // Setup sponsored fees
        const sponsoredFPC = await getSponsoredFPCInstance();
        await wallet.registerContract(sponsoredFPC, SponsoredFPCContract.artifact);
        paymentMethod = new SponsoredFeePaymentMethod(sponsoredFPC.address);

        // Create and deploy account
        const secretKey = Fr.random();
        const signingKey = GrumpkinScalar.random();
        const salt = Fr.random();
        account = await wallet.createSchnorrAccount(secretKey, salt, signingKey);
        await (await account.getDeployMethod()).send({
            from: AztecAddress.ZERO,
            fee: { paymentMethod }
        }).wait({ timeout: getTimeouts().deployTimeout });

        // Deploy contract
        contract = await MyContract.deploy(wallet, account.address).send({
            from: account.address,
            fee: { paymentMethod }
        }).deployed({ timeout: getTimeouts().deployTimeout });
    }, 600000);

    it("should perform an action", async () => {
        const tx = await contract.methods.myMethod(args).send({
            from: account.address,
            fee: { paymentMethod }
        }).wait({ timeout: getTimeouts().txTimeout });

        expect(tx.status).toBe(TxStatus.SUCCESS);
    }, 60000);
});

Key Differences from Noir Tests

Aspect Noir (TestEnvironment) TypeScript (Jest)
Network Simulated Real (local/devnet)
Fees Not required Required
Proofs Simulated Real (on devnet)
Speed Fast Slower
State In-memory Persistent

When to Use E2E Tests

  • Integration with real network behavior
  • Fee payment verification
  • Multi-account scenarios
  • Full deployment pipeline testing
  • Cross-contract interactions
  • Production readiness validation