0
0
Blockchain / Solidityprogramming~5 mins

Testing with ethers.js in Blockchain / Solidity

Choose your learning style9 modes available
Introduction

Testing with ethers.js helps you check if your blockchain smart contracts work correctly before using them for real. It saves time and avoids mistakes.

When you want to make sure your smart contract functions do what you expect.
Before deploying a contract to a live blockchain to avoid costly errors.
When you want to automate checks after making changes to your contract code.
To simulate blockchain interactions like sending transactions or reading data.
When you want to learn how your contract behaves in different situations.
Syntax
Blockchain / Solidity
import { ethers } from 'ethers';

// Example: Connect to a provider
const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');

// Example: Create a signer (an account to send transactions)
const signer = provider.getSigner(0);

// Example: Deploy or connect to a contract
const contract = new ethers.Contract(contractAddress, contractABI, signer);

// Example: Call a contract function
const result = await contract.someFunction(args);

Use ethers.providers.JsonRpcProvider() to connect to a local blockchain for testing.

Use await with contract calls because they return promises.

Examples
This connects to a local blockchain running on your computer for testing.
Blockchain / Solidity
import { ethers } from 'ethers';

// Connect to local blockchain
const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');
This gets the first account from the local blockchain to act as the sender.
Blockchain / Solidity
const signer = provider.getSigner(0);

// Use the first account to send transactions
This lets you call contract functions that change data.
Blockchain / Solidity
const contract = new ethers.Contract(address, abi, signer);

// Connect to your deployed contract with signer to send transactions
This calls a contract function that only reads data and prints the result.
Blockchain / Solidity
const value = await contract.readValue();
console.log(value);
Sample Program

This program connects to a local blockchain, reads a value from a contract, updates it, and reads it again to confirm the change.

Blockchain / Solidity
import { ethers } from 'ethers';

async function main() {
  // Connect to local blockchain
  const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');

  // Get first account signer
  const signer = provider.getSigner(0);

  // Simple contract ABI and address (example)
  const abi = [
    'function getValue() view returns (uint256)',
    'function setValue(uint256 newValue)'
  ];
  const address = '0x0000000000000000000000000000000000000001';

  // Connect to contract
  const contract = new ethers.Contract(address, abi, signer);

  // Call read function
  const oldValue = await contract.getValue();
  console.log('Old value:', oldValue.toString());

  // Call write function
  const tx = await contract.setValue(42);
  await tx.wait();
  console.log('Value updated');

  // Read updated value
  const newValue = await contract.getValue();
  console.log('New value:', newValue.toString());
}

main().catch(console.error);
OutputSuccess
Important Notes

Make sure your local blockchain (like Hardhat or Ganache) is running before testing.

Use await tx.wait() to wait for the transaction to be confirmed.

Contract address and ABI must match your deployed contract for tests to work.

Summary

Testing with ethers.js lets you interact with smart contracts in code to check their behavior.

You connect to a blockchain provider, get a signer, and call contract functions.

Always wait for transactions to confirm before checking results.