Web3 & DApp Development Fundamentals · Leçon

Fixtures

Configuration de test réutilisable

Leçon 4 sur 413 étapes

Fixtures est une leçon Web3 & DApp Development Fundamentals gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Web3 & DApp Development Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.

Le problème de la configuration

De nombreuses vérifications nécessitent le même état initial — un contrat déployé, des comptes approvisionnés et une configuration initiale. Répéter cette configuration dans chaque beforeEach est lent et répétitif.

Les fixtures résolvent ce problème en exécutant la configuration une fois et en créant un instantané du résultat.

Qu’est-ce que loadFixture

Hardhat fournit loadFixture dans ses assistants réseau. Lors de sa première exécution, il exécute une fonction de fixture et prend un instantané de l’EVM. Les appels suivants reviennent simplement à cet instantané au lieu de tout réexécuter.

Les vérifications sont ainsi rapides et parfaitement isolées.

Importer l’assistant

Importez loadFixture depuis le paquet d’assistants réseau (inclus dans la Toolbox) :

const { loadFixture, } = require("@nomicfoundation/hardhat-network-helpers"); const { expect } = require("chai"); const { ethers } = require("hardhat");
const {
  loadFixture,
} = require("@nomicfoundation/hardhat-network-helpers");
const { expect } = require("chai");
const { ethers } = require("hardhat");

Écrire une fonction de fixture

Une fixture est une fonction asynchrone qui effectue la configuration et renvoie les objets dont les vérifications ont besoin :

async function deployTokenFixture() { const [owner, alice] = await ethers.getSigners(); const Token = await ethers.getContractFactory("Token"); const token = await Token.deploy(); return { token, owner, alice }; }
async function deployTokenFixture() {
  const [owner, alice] = await ethers.getSigners();
  const Token = await ethers.getContractFactory("Token");
  const token = await Token.deploy();
  return { token, owner, alice };
}

Utiliser une fixture dans une vérification

Appelez loadFixture au début de chaque vérification et déstructurez les éléments nécessaires :

it("assigns supply to owner", async function () { const { token, owner } = await loadFixture(deployTokenFixture); expect(await token.balanceOf(owner.address)) .to.equal(await token.totalSupply()); });
it("assigns supply to owner", async function () {
  const { token, owner } = await loadFixture(deployTokenFixture);
  expect(await token.balanceOf(owner.address))
    .to.equal(await token.totalSupply());
});

Pourquoi les fixtures sont rapides

Réexécuter le déploiement pour chaque vérification est coûteux. Avec les fixtures :

  • Les transactions de configuration ne sont exécutées qu’une seule fois.
  • Les vérifications suivantes ramènent l’EVM à l’instantané — une opération presque instantanée.

Les grandes suites peuvent s’exécuter beaucoup plus rapidement que des configurations équivalentes avec beforeEach.

Garantie d’isolement

Chaque appel à loadFixture revenant à l’instantané initial, les vérifications ne peuvent pas se transmettre leur état. Une vérification qui transfère des jetons ne modifie pas les soldes de départ de la suivante.

Cet isolement rend les résultats fiables et indépendants de l’ordre d’exécution.

Fixtures avec paramètres

loadFixture reçoit une référence de fonction, et non un appel ; il ne peut donc pas accepter directement d’arguments. Pour varier la configuration, définissez plusieurs fixtures :

async function deployPausedFixture() { const base = await deployTokenFixture(); await base.token.pause(); return base; }

Chaque variante possède son propre instantané.

async function deployPausedFixture() {
  const base = await deployTokenFixture();
  await base.token.pause();
  return base;
}

Fixtures ou beforeEach

Quand utiliser chacune de ces options ?

  • loadFixture — à privilégier pour les configurations nécessitant de nombreux déploiements ; plus rapide et fondé sur des instantanés.
  • beforeEach — convient à une configuration simple ou lorsque vous avez besoin d’effets secondaires propres à chaque vérification.

L’équipe Hardhat recommande les fixtures pour la plupart des configurations de déploiement de contrats.

Un piège courant

N’appelez pas directement la fonction de fixture dans loadFixture :

// Wrong: passes the result, not the function await loadFixture(deployTokenFixture()); // Right: passes the function reference await loadFixture(deployTokenFixture);

Passer la référence permet à Hardhat de gérer le cycle de vie de l’instantané.

// Wrong: passes the result, not the function
await loadFixture(deployTokenFixture());

// Right: passes the function reference
await loadFixture(deployTokenFixture);

Partager des fixtures entre les fichiers

Vous pouvez déplacer une fixture dans son propre module et l’importer partout où elle est nécessaire :

// fixtures.js module.exports = { deployTokenFixture }; // in a test file const { deployTokenFixture } = require("./fixtures"); const { token } = await loadFixture(deployTokenFixture);

La mise en cache des instantanés continue de fonctionner entre les fichiers lors d’une même exécution.

// fixtures.js
module.exports = { deployTokenFixture };

// in a test file
const { deployTokenFixture } = require("./fixtures");
const { token } = await loadFixture(deployTokenFixture);

Vérification rapide

Vérifiez votre compréhension des fixtures.

Récapitulatif

Vous avez appris à réutiliser la configuration des vérifications avec des fixtures.

  • loadFixture exécute la configuration une fois et crée un instantané de l’EVM.
  • Les appels suivants reviennent à l’instantané — rapidement et avec un isolement complet.
  • Une fixture est une fonction asynchrone qui renvoie les objets nécessaires aux vérifications.
  • Passez la référence de la fonction, sans jamais l’appeler.
  • Définissez plusieurs fixtures pour différents états initiaux.
Gratuit pour commencer

Apprends Web3 & DApp Development Fundamentals avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
29
Leçons
105

Questions Fréquemment Posées

La leçon « Fixtures » est-elle gratuite ?

Oui — le texte complet de « Fixtures » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Web3 & DApp Development Fundamentals, passe à CoddyKit PRO. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fixtures » ?

Configuration de test réutilisable Tu pratiques Web3 & DApp Development Fundamentals avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Web3 & DApp Development Fundamentals ?

Aucune expérience préalable n'est requise. Web3 & DApp Development Fundamentals sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Fixtures » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Web3 & DApp Development Fundamentals ?

Oui. Chaque leçon Web3 & DApp Development Fundamentals inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écrire des tests
  2. Tester les annulations et événements
  3. Couverture et rapports de gas
  4. Fixtures
← Retour à Web3 & DApp Development Fundamentals