Beautifying Your Smart Contract Tests With JavaScript
Make your tests more readable
In my previous blog post I wrote about testing smart contracts with JavaScript. In this one, I would like to show techniques I picked along the way that makes tests more readable and elegant.
For this, I am going to use the code created in Testing Your Smart Contract With JavaScript as reference. Please read that blog post first.
Carrying On Where We Left Off
To beautify out test code, let’s use some handy libraries. Please go ahead and install these:
npm install --only=dev --save chai
npm install --only=dev --save chai-as-promised
npm install --only=dev --save chai-bignumber
We are adding these chai libraries to extend chai with elegant code syntax in our tests.
Go to the/test
folder and create a helpers.js
file. Add the following code to this file:
const BigNumber = web3.BigNumberconst should = require('chai')
.use(require('chai-as-promised'))
.use(require('chai-bignumber')(BigNumber))
.should()const EVMThrow = 'invalid opcode'module.exports = { should, EVMThrow }
That’s it.
Applying in our tests
Let’s modify our first test with the new syntax so we have an idea. Here is the modification on the first test.
fundRaise.js
const FundRaise = artifacts.require('./FundRaise.sol')
const { should } = require('./helpers')contract('FundRaise', function ([owner, donor]) {... it('has an owner', async function () {
const fundRaiseOwner = await fundRaise.owner() fundRaiseOwner.should.be.equal(owner)
})...
First we require should
from the helpers.js
file as such:
const { should } = require('./helpers')
Then we change the first test by removing the assert
syntax to the more readable should
one.
it('has an owner', async function () {
const fundRaiseOwner = await fundRaise.owner() fundRaiseOwner.should.be.equal(owner)
})
Here we see that the pattern becomes variable
+ .should
+ .be
+ equal
+ (expectation).
You are able to find the whole range of api that should
provides here.
This is what it looks like when applying this syntax to the rest of the tests withinfundRaise.js
.
I am curious to see what kind of elegant solution you have/ come up with testing your smart contracts with JS.
The code for this blog post is found here https://github.com/gustavoguimaraes/smart-contract-testing-javascript-example-/tree/feature/beautifying-tests