WEB3DEV

Cover image for Dominando o Teste de Contratos Inteligentes: Um Guia Abrangente para o Hardhat
Panegali
Panegali

Posted on

Dominando o Teste de Contratos Inteligentes: Um Guia Abrangente para o Hardhat

O teste de contratos inteligentes é um aspecto crucial do processo de desenvolvimento para garantir que os contratos funcionem corretamente e sem erros. O Hardhat é um ambiente de desenvolvimento para aplicativos Ethereum que oferece várias ferramentas e bibliotecas para facilitar o teste de contratos inteligentes.

Aqui estão os benefícios de testar contratos inteligentes com o Hardhat:

  1. Teste rápido: O Hardhat permite que os desenvolvedores criem uma blockchain local da Ethereum para testes, resultando em testes mais rápidos do que em uma blockchain ativa.
  2. Economia de custos: O teste em uma blockchain local evita que os desenvolvedores paguem por transações reais na blockchain ativa, resultando em uma economia significativa de custo.
  3. Controle sobre o ambiente de teste: O teste em uma blockchain local oferece aos desenvolvedores controle total sobre o ambiente de teste, incluindo a opção de redefinir a blockchain a qualquer momento.
  4. Integração: O Hardhat se integra perfeitamente com as principais estruturas de teste, como o Mocha e o Chai, facilitando para os desenvolvedores escrever e executar testes para seus contratos inteligentes.
  5. Flexibilidade: O Hardhat fornece várias ferramentas e bibliotecas para testar contratos inteligentes, permitindo que os desenvolvedores selecionem a abordagem de teste que melhor atende aos seus requisitos.

Para ajudá-lo a começar rapidamente, configuramos tudo o que você precisa, desde o contrato até os scripts de teste, neste repositório.

1. Vamos clonar o Repo

1.1 Bifurcando o repositório do tutorial:

  • Dirija-se ao nosso Repositório de Tutoriais e clique no botão “Fork” para criar uma cópia do repositório em sua própria conta. Aguarde o processo de bifurcação terminar antes de prosseguir.

1.2 Clonando o repositório localmente:

  • Acesse seu repositório bifurcado no GitHub.
  • Clique no botão “Code” (Código) e copie o URL HTTPS ou SSH.
  • Abra seu terminal ou o Git Bash.
  • Navegue até o diretório onde deseja clonar o repositório.
  • Execute o comando abaixo para clonar o repositório.
git clone < cole a URL que você copiou>
Enter fullscreen mode Exit fullscreen mode
  • Aguarde a conclusão do processo de clonagem. Uma vez feito isso, você deve ver um novo diretório com o nome do repositório no diretório.

Para acessar o repositório clonado, use este comando cd &lt;Name of the cloned Repo> e, em seguida, navegue até a pasta MultiContractTutorial usando este comando: cd MultiContractTutorial.

A estrutura de uma pasta de projeto do Hardhat normalmente inclui o seguinte:

  1. contracts/: Esta pasta contém o código-fonte do Solidity para os contratos do projeto.
  2. test/: Esta pasta contém os arquivos de teste do JavaScript para os contratos inteligentes.
  3. hardhat.config.js: Este é o arquivo de configuração primário para o projeto no Hardhat. Ele especifica várias opções, como a rede Ethereum a ser usada para implantação, o compilador Solidity e o executor de teste a ser usado.
  4. package.json: Este arquivo contém metadados sobre o projeto, como nome, versão, dependências e scripts do projeto.
  5. scripts/: Esta pasta inclui scripts de implantação para implantação de contratos inteligentes usando o Hardhat.

2. Compreendendo o script de teste

Na pasta de teste, existem vários scripts de teste que abordam diferentes contratos inteligentes.

2.1 Vamos começar entendendo o script simple-test.js que está associado ao contrato SimpleStorage.sol.

Nas duas primeiras linhas do script, estamos importando as dependências necessárias para o teste:

  • Chai: Usado para escrever asserções para testes de contrato.
  • Ethers: Usado ​​para interagir com a blockchain Ethereum e implantar os contratos inteligentes.

O script define um bloco describe para um grupo de testes relacionados ao contrato SimpleStorage:

  • Ele obtém o contract factory usando code>ethers.getContractFactory("SimpleStorage").
  • Implanta uma nova instância do contrato “SimpleStorage” usando simpleStorageFactory.deploy().

Esse código define um bloco it, que é um teste único dentro do bloco describe do contrato SimpleStorage. O teste faz o seguinte:

  • Chama a função retrieve e armazena o valor de retorno em currentValue.
  • Usa a função assert da biblioteca Chai para afirmar que currentValue.toString() é igual a 0.

Em resumo, este teste verifica se o valor padrão de favoriteNumber quando o contrato é implantado é igual a zero.

O segundo teste faz o seguinte:

  • Chama a função store na instância do contrato com o argumento 7.
  • Chama a função retrieve e armazena o valor de retorno em updatedValue.
  • Usa a função assert da biblioteca Chai para afirmar que o updatedValue.toString() é igual a 7.

Em resumo, este teste verifica a função store do contrato SimpleStorage e verifica se ele atualiza corretamente o favoriteNumber pelo número especificado.

Da mesma forma, no quarto bloco de teste, estamos testando a função addPeople.

2.2 Teste do Token ERC20

Vamos entender o script Token-test.js.

Neste script, estamos testando o contrato Token.sol.

O script é dividido em dois blocos describe:

Implantação:

  • Este bloco é usado para testar a implantação do contrato e suas propriedades após a implantação.
  • Dois testes são definidos dentro do bloco describe.
  • No primeiro teste, estamos verificando se o dono do contrato está com o saldo correto de tokens após a implantação, que deve ser de 1000 tokens.
  • No segundo teste, estamos verificando se o fornecimento total do token está definido como 1000.

Transações:

  • Este bloco é usado para testar a funcionalidade dos métodos de contrato de token, como transfer, balanceOf e approve.
  • Três testes são definidos dentro do bloco describe.
  • No primeiro teste, estamos verificando se o método transfer transfere tokens entre contas corretamente.
  • No segundo teste, estamos verificando se o método de transferência reverte se o remetente não tiver tokens suficientes para transferir.
  • No terceiro teste, estamos verificando se o método de aprovação atualiza corretamente o abono para a conta do comprador.

Em resumo, este teste está verificando a implantação bem-sucedida do contrato Token e sua funcionalidade para transferir tokens entre contas, verificar o saldo do token e atualizar a permissão.

3. Executando o teste

Para instalar os pacotes necessários, execute o seguinte comando:

npm install
Enter fullscreen mode Exit fullscreen mode

De acordo com as práticas padrão, os scripts de teste do Hardhat são executados localmente, e isso tem uma grande desvantagem, pois não podemos depurar a transação com falha. Então, vamos usar o BuildBear.io. Com o BuildBear, todas as nossas transações podem ser depuradas facilmente usando seu rastreador de transação embutido.

3.1 Para começar a usar o BuildBear, visite o aplicativo BuildBear.

3.2. Crie sua bifurcação de rede de testes privada a partir da rede principal da Ethereum, sinta-se à vontade para bifurcar qualquer cadeia.

3.3. Adicione sua rede de testes privada na sua carteira MetaMask usando o botão “Add to Metamask”:

3.4. Atualize o hardhat.config.js.

  • Dirija-se ao seu Painel e clique em “verify contract”.

Para executar todos os testes em seu projeto, abra seu terminal e digite o seguinte comando:

npx hardhat test
Enter fullscreen mode Exit fullscreen mode

Este comando executará cada caso de teste no projeto e enviará os resultados para o terminal.

Se todos os testes forem bem-sucedidos, você deverá ver uma longa lista de resultados de testes aprovados exibidos no terminal, como no exemplo abaixo:

Esses resultados indicam que todos os nossos testes foram aprovados com sucesso.

PARABÉNS! VOCÊ APRENDEU A TESTAR CONTRATOS INTELIGENTES USANDO O HARDHAT!

Se você gosta do que estamos fazendo, siga-nos no Twitter, no LinkedIn e participe do grupo do Telegram, se ainda não o fez.

E por favor, nos aplauda 👏 se você gosta do nosso trabalho.

Github Repo: Tutoriais Buildbear

Sobre a BuildBear:

A BuildBear é uma plataforma para testar dApps em escala, para equipes. Ela fornece aos usuários sua própria rede de testes privada para testar seus contratos inteligentes e dApps, que podem ser bifurcados de qualquer cadeia EVM. Ela também fornece uma Torneira, Explorer e RPC para fins de teste.

A BuildBear visa construir um ecossistema de ferramentas para testar dApps em escala para as equipes.

Leia nossos artigos anteriores (em inglês) e continue aprendendo:


Artigo escrito por Chandan. Traduzido por Marcelo Panegali.

Oldest comments (0)