Skrive tester
Mocha og Chai
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.
describegrupperer relaterte tester.itdefinerer ett enkelt testtilfelle.expectlager 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 testHardhat 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 testAsync 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 mednpx hardhat test. - Bruk alltid
awaitved asynkrone kontraktskall. getSigners+connectsimulerer ulike brukere.- Tal på kjeden er BigInt; bruk
parseEther/formatEtherogbeforeEachfor et rent oppsett.
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.