Skip to content

Mock3 is a wrapper using ethers.js to help develop and run UI tests for DApps on Ethereum

License

Notifications You must be signed in to change notification settings

curvegrid/mock3

Repository files navigation

Mock3

GitHub Workflow Badge

Mock3 is a wrapper using ethers.js to help developing and running UI tests for dApps on Ethereum. This can connect an actual blockchain network such as Goerli Testnet, Infura and Ganache.

Major good things of Mock3 are that it can see actual blockchain result(block number, transaction hash and so forth) generated by Ethereum node, and if you combine this with your local Ethereum node (necessary to reset chaindata or just use Ganache) it will be acting like a static mock at every test.

Currently, very limited number of features are covered but it will be better later. (Think positively 💡)

Usage

First, install a package:

yarn add --dev mock3

or if you are using npm:

npm install --save-dev mock3

Second, create a new Mock3 in your source code. You can select one of ways below:

// Set JSON RPC using Infura, Ganache, or your own
// You should set RPC_URL or it will be an error
const web3 = new Mock3('RPC_URL');

You can use if branch using NODE_ENV or your own way to select which web3 will be used.

let web3;
if (NODE_ENV === 'test') {
  web3 = new Mock3('RPC_URL');
} else {
  web3 = window.ethereum; // or something you want
}

Third, set signers you want to use using private keys. You can select one of ways below:

// Set a signer with a single private key
web3.setSigner('0x3afe...');

// Set signers with private key array
web3.setSigner(['0x3afe...', '0xf2f1...']);

You can set a specific account enabled only using setAccountIndex() like real behavior of selecting from MetaMask or just retrieve all accounts.

// Retrieve all accounts set by you
web3.setAccountIndex(null); // or no set at all after creating first
const accounts = (await web3.listAccounts()).map((account) => account.address);

// Just retrieve an account in index 2
web3.setAccountIndex(2);
const account = (await web3.listAccounts()).map((account) => account.address);

Before and After using Mock3

Before:

Web 3 Transaction

After:

You will be free from clicking bunch of MeteMask popups during the development and to add any UI tests related to transactions.

Mock3 Transaction

Development

Clone this repo and link it as a npm package:

git https://github.com/curvegrid/mock3.git
cd mock3
npm link # or yarn link

Then you can add it as a local package in your project:

cd path-to-your-project
npm link mock3 # or yarn link mock3

Contribution

Anything is welcome. 👋 (DO NOT FORGET to add tests for the new PR)

About

Mock3 is a wrapper using ethers.js to help develop and run UI tests for DApps on Ethereum

Resources

License

Stars

Watchers

Forks

Packages

No packages published