Testes Anchor TS
anchor test é o caminho de integração padrão para projetos Anchor 0.32.1: compila programas, faz deploy em validador local e executa testes TypeScript contra a IDL. Use para fluxos end-to-end com semântica RPC real.
Busque em todas as páginas da documentação
anchor test é o caminho de integração padrão para projetos Anchor 0.32.1: compila programas, faz deploy em validador local e executa testes TypeScript contra a IDL. Use para fluxos end-to-end com semântica RPC real.
Cartão de receita de referência rápida - pronto para copiar e colar.
anchor test
# ou com validador existente:
anchor test --skip-local-validatorimport * as anchor from "@coral-xyz/anchor";
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const program = anchor.workspace.MyProgram as Program<MyProgram>;Quando usar:
import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { MyProgram } from "../target/types/my_program";
import { Keypair, PublicKey, SystemProgram } from "@solana/web3.js";
import { TOKEN_PROGRAM_ID, createMint, getOrCreateAssociatedTokenAccount } from "@solana/spl-token";
import { assert } from "chai";
describe("my_program", () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const program = anchor.workspace.MyProgram as Program<MyProgram>;
const payer = (provider.wallet as anchor.Wallet).payer;
it("initializes vault", async () => {
const user = Keypair.generate();
await provider.connection.confirmTransaction(
await provider.connection.requestAirdrop(user.publicKey, 2e9)
);
const mint = await createMint(provider.connection, payer, payer.publicKey, null, 6);
const ata = await getOrCreateAssociatedTokenAccount(
provider.connection, payer, mint, user.publicKey
);
const [vaultPda] = PublicKey.findProgramAddressSync(
[Buffer.from("vault"), user.publicKey.toBuffer()],
program.programId
);
await program.methods
.initVault()
.accounts({
user: user.publicKey,
vault: vaultPda,
mint: mint,
userToken: ata.address,
tokenProgram: TOKEN_PROGRAM_ID,
systemProgram: SystemProgram.programId,
})
.signers([user])
.rpc();
const vault = await program.account.vault.fetch(vaultPda);
assert.ok(vault.authority.equals(user.publicKey));
});
});O que isso demonstra:
Anchor.toml..rpc() envia transação assinada e aguarda confirmação.anchor test executa anchor build, inicia validador (a menos que pulado), faz deploy de programas, executa tests/**/*.ts.chai comuns.target/idl e tipos em target/types.Anchor.toml paga taxas de deploy e teste.| Campo | Propósito |
|---|---|
[provider] cluster | URL localnet / devnet |
[scripts] test | Comando de teste customizado |
[test] startup_wait | Atraso de prontidão do validador |
// Combine códigos de erro do Rust #[error_code]
import { AnchorError } from "@coral-xyz/anchor";
try {
await program.methods.badIx().rpc();
} catch (e) {
const err = e as AnchorError;
console.log(err.error.errorCode.code);
}Anchor.toml devnet mas validador localnet. Correção: Alinhe URL do provider com cluster em execução.anchor build antes do teste.pkill solana-test-validator no pre-step CI.--skip-local-validator ausente - Duplo start de validador falha. Correção: Documente ciclo de vida do validador no CI.| Alternativa | Use quando | Não use quando |
|---|---|---|
| Bankrun | Testes TS mais rápidos | Precisa recursos RPC completos |
| LiteSVM | Testes unitários Rust | Equipe só TypeScript |
| Fork Surfpool | Estado DeFi mainnet | Programa CRUD simples |
Mocha via ts-mocha no template Anchor - pode trocar para node:test com script customizado.
Defina cluster do provider para devnet e execute anchor test --skip-local-validator com carteira financiada.
Membros do workspace Cargo.toml todos fazem deploy em anchor test quando configurados em Anchor.toml.
Hooks before criam mints/usuários; commite keypairs JSON apenas para localnet, nunca chaves mainnet.
Adicione instruções compute budget no builder de transação quando ix se aproxima do limite CU.
Suportadas via padrões web3.js v2 - garanta que cliente construa tx v0 ao testar ALTs.
cargo test executa apenas testes Rust; anchor test inclui deploy + integração TS.
Geralmente vazamento de estado do validador - use --reset ou keypairs únicos por teste.
Cache target/ e módulos npm; ainda recompile programas a cada execução para correção.
Instale solana CLI correspondente no CI para validador local combinar com runtime de produção.
Versões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026