Grunnleggende om Web3- og DApp-utvikling · leksjon

Skrive tester

Mocha og Chai

Leksjon 1 av 413 trinn

Skrive tester er en gratis leksjon i Grunnleggende om Web3- og DApp-utvikling på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om Web3- og DApp-utvikling, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Hvorfor teste kontrakter

Smartkontrakter er uforanderlige etter at de er distribuert, og de inneholder ofte verdier med reell verdi. Én enkelt feil kan være umulig å rette opp, så grundig testing er avgjørende.

  • Oppdag logiske feil før utrulling.
  • Dokumenter forventet oppførsel.
  • Beskytt mot regresjoner ved refaktorering.

Mocha og Chai

Hardhat bruker Mocha som testrammeverk og Chai for påstander. Begge er inkludert i Toolbox.

  • describe grupperer relaterte tester.
  • it definerer ett enkelt testtilfelle.
  • expect lager påstander om verdier.

Tester ligger i mappen test/.

En første testfil

En enkel test importerer ethers og Chai, og distribuerer deretter kontrakten og kontrollerer den:

const { expect } = require("chai"); const { ethers } = require("hardhat"); describe("Greeter", function () { it("returns the initial greeting", async function () { const Greeter = await ethers.getContractFactory("Greeter"); const greeter = await Greeter.deploy(); expect(await greeter.greeting()).to.equal("Hello, Hardhat"); }); });
const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("Greeter", function () {
  it("returns the initial greeting", async function () {
    const Greeter = await ethers.getContractFactory("Greeter");
    const greeter = await Greeter.deploy();
    expect(await greeter.greeting()).to.equal("Hello, Hardhat");
  });
});

Kjøre tester

Kjør hele testpakken med:

npx hardhat test

Hardhat kompilerer kontraktene først, starter et nytt nettverk i prosessen og rapporterer tester som består eller mislykkes. De kan angi en sti for å kjøre bare én fil.

npx hardhat test

Async og await

Nesten all kontraktsinteraksjon er asynkron fordi den kommuniserer med nettverket. Bruk alltid await ved utrullinger og kall:

it("works", async function () { const c = await Factory.deploy(); await c.waitForDeployment(); const value = await c.getValue(); expect(value).to.equal(0); });

Å glemme await er den vanligste årsaken til forvirrende testresultater.

it("works", async function () {
  const c = await Factory.deploy();
  await c.waitForDeployment();
  const value = await c.getValue();
  expect(value).to.equal(0);
});

Vanlige Chai-matchere

Chai tilbyr uttrykksfulle matchere for påstander:

  • .to.equal(x) — strikt likhet.
  • .to.be.true / .to.be.false — boolske verdier.
  • .to.be.gt(n) — større enn.
  • .to.deep.equal([...]) — likhet mellom matriser eller objekter.
expect(await token.balanceOf(user)).to.equal(100);
expect(await token.balanceOf(user)).to.equal(100);

Arbeide med signere

getSigners returnerer testkontoer som De kan bruke som ulike brukere:

const [owner, alice, bob] = await ethers.getSigners(); await token.connect(alice).transfer(bob.address, 50);

connect(signer) sender det neste kallet som denne kontoen, noe som er avgjørende for testing av tilgangskontroll.

const [owner, alice, bob] = await ethers.getSigners();
await token.connect(alice).transfer(bob.address, 50);

BigInt-verdier

Tal på kjeden er store heltall. I ethers v6 er de JavaScript-verdier av typen BigInt. Sammenlign dem nøye:

const supply = await token.totalSupply(); expect(supply).to.equal(ethers.parseEther("1000"));

Bruk parseEther og formatEther for å konvertere mellom menneskelesbare enheter og enheter på kjeden.

const supply = await token.totalSupply();
expect(supply).to.equal(ethers.parseEther("1000"));

Oppsett med beforeEach

Bruk beforeEach til å distribuere en ny kontrakt for hver test, slik at testene blir isolerte:

let token; beforeEach(async function () { const Token = await ethers.getContractFactory("Token"); token = await Token.deploy(); });

Hvert it starter da fra en ren og identisk tilstand.

let token;
beforeEach(async function () {
  const Token = await ethers.getContractFactory("Token");
  token = await Token.deploy();
});

Lese testresultater

Et grønt hakemerke betyr at testen bestod; et rødt kryss med en diff viser hva som mislyktes. Mocha skriver ut describe- og it-etikettene, så bruk beskrivende navn:

  • Godt: it("reverts when caller is not owner")
  • Utydelig: it("test1")

Kjøre én enkelt test

Under utvikling ønsker De ofte å fokusere på én test. Bruk Mocha sin .only:

it.only("reverts when not owner", async function () { // only this test runs });

De kan også kjøre én enkelt fil med npx hardhat test test/Token.js. Husk å fjerne .only før De committer.

it.only("reverts when not owner", async function () {
  // only this test runs
});

Sjekk kunnskapene

Test forståelsen Deres av hvordan man skriver kontrakttester.

Oppsummering

De har lært å skrive kontrakttester.

  • Hardhat bruker Mocha (describe/it) og Chai (expect).
  • Tester ligger i test/ og kjøres med npx hardhat test.
  • Bruk alltid await ved asynkrone kontraktskall.
  • getSigners + connect simulerer ulike brukere.
  • Tal på kjeden er BigInt; bruk parseEther/formatEther og beforeEach for et rent oppsett.
Gratis å komme i gang

Lær deg Grunnleggende om Web3- og DApp-utvikling med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
29
Leksjoner
105

Ofte stilte spørsmål

Er leksjonen «Skrive tester» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om Web3- og DApp-utvikling, inkludert «Skrive tester», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om Web3- og DApp-utvikling inneholder totalt 4 leksjoner.

Hva lærer jeg i «Skrive tester»?

Mocha og Chai Du øver på Grunnleggende om Web3- og DApp-utvikling med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende om Web3- og DApp-utvikling?

Ingen tidligere erfaring er nødvendig. Grunnleggende om Web3- og DApp-utvikling på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Skrive tester»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende om Web3- og DApp-utvikling-leksjonen?

Ja. Alle Grunnleggende om Web3- og DApp-utvikling-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Skrive tester
  2. Teste revert og hendelser
  3. Dekning og gas-rapporter
  4. Fixtures
← Tilbake til Grunnleggende om Web3- og DApp-utvikling