Crowdbotics
Published in

Crowdbotics

Solidity CRUD Tutorial, Part 2 — Testing Your Smart Contract with Truffle

Testing a Solidity smart contract using Truffle framework

Installing Truffle

Installation

sudo npm install -g truffle
truffle
truffle init
truffle compile
truffle develop
Truffle Develop started at http://127.0.0.1:9545/Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de
Private Keys:
(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1
(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c
(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418
(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63
(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8
(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7
(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4
(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
truffle(develop)>
web3.eth.getBalance(“0x627306090abab3a6e1400e9345bc60c78a8bef57”)Result - BigNumber { s: 1, e: 20, c: [ 1000000 ] }
web3.eth.getBalance("0x627306090abab3a6e1400e9345bc60c78a8bef57").toNumber()Result -  100000000000000000000
web3.fromWei(web3.eth.getBalance(“0x627306090abab3a6e1400e9345bc60c78a8bef57”).toNumber())Result - '100' <<< Number of ethereum on the test account 
Image source
deploy 
or
migrate

Test Cases-

const CrudApp = artifacts.require('./CrudApp.sol')
const assert = require('assert')
let crudInstance;contract('CrudApp' , (accounts) => {
beforeEach(async () => {
crudInstance = await CrudApp.deployed()
})
it('should insert new user' , async() => {
await crudInstance.insert("USA" , "Trump", 30000000);
const country = await crudInstance.getCountry("USA");
assert.equal(country[0] , "USA");
assert.equal(country[1] , "Trump");
assert.equal(country[2].toNumber() , 30000000);
await crudInstance.updateLeader("USA" , "Hillary");const country1 = await crudInstance.getCountry("USA");
assert.equal(country1[0] , "USA");
assert.equal(country1[1] , "Hillary");
assert.equal(country1[2].toNumber() , 30000000);
await crudInstance.deleteCountry("USA");const total = await crudInstance.getTotalCountries();
assert.equal(total , 0);
})
})
truffle(develop)>  Above is what we calling Truffle CLI. Running commands on truffle.  
CrudApp.deployed().then(function(instance) { crud = instance;})

ABI is the interface between two program modules, one of which is often at the level of machine code. The interface is the de facto method for encoding/decoding data into/out of the machine code.

crud.getTotalCountries().then(function(num){var str= num.toString(); console.log(str)});
crud.insert("USA","Trump",30000000);
{ tx: '0x6502bd013b41f246e31f071690ffb1c8f41d21c4cddbad8bb99bf53d9ac6c982',
receipt:
{ transactionHash: '0x6502bd013b41f246e31f071690ffb1c8f41d21c4cddbad8bb99bf53d9ac6c982',
transactionIndex: 0,
blockHash: '0x297ed89cf22d78956e019100fd15ece49882124ba6d23476c4e48914d3da35f3',
blockNumber: 42,
gasUsed: 129230,
cumulativeGasUsed: 129230,
contractAddress: null,
logs: [ [Object] ],
status: '0x01',
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000008000000000000000000000002000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000' },
logs:
[ { logIndex: 0,
transactionIndex: 0,
transactionHash: '0x6502bd013b41f246e31f071690ffb1c8f41d21c4cddbad8bb99bf53d9ac6c982',
blockHash: '0x297ed89cf22d78956e019100fd15ece49882124ba6d23476c4e48914d3da35f3',
blockNumber: 42,
address: '0x8f0483125fcb9aaaefa9209d8e9d7b9c8b9fb90f',
type: 'mined',
event: 'CountryEvent',
args: [Object] } ] }
crud.getCountry("USA");
[ 'USA', 'Trump', BigNumber { s: 1, e: 7, c: [ 30000000 ] } ]

Conclusion

Starting a new blockchain project, or looking for a Solidity developer?

--

--

The fastest way to build your next app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store