aztec-e2e-testing
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.
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.
| name | aztec-e2e-testing |
|---|---|
| description | 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. |
| allowed-tools | Read, Grep, Glob, Edit, Write, Bash |
Aztec E2E Testing Skill
Generate Jest end-to-end tests for Aztec contracts against live networks.
Subskills
- Jest Setup - Jest configuration and test structure
- Test Patterns - Common E2E test patterns
- Sponsored Testing - Testing with sponsored fees
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