Here is the fixed/working code, thanks to advice from https://github.com/OpenZeppelin/zeppelin-solidity/issues/584#issuecomment-376042522 it('Token transfer', async () => { const fromAccount = accounts[1] const toAccount = accounts[4] const transferLimit = 4000000000000000000 const transferAmount = 3000000000000000000 let ecoSystemBalance = await tokenInstance.balanceOf(fromAccount) assert.isAtLeast(ecoSystemBalance, transferLimit, 'From account balance should be atleast 4') await tokenInstance.approve(toAccount, transferLimit, {from: fromAccount}) assert.equal(await tokenInstance.allowance(fromAccount, toAccount), transferLimit, 'Allowance from->to should be 4') console.log(`Attempting a transfer with ecoSystem balance of ${ecoSystemBalance}`) await tokenInstance.transferFrom(fromAccount, toAccount, transferAmount, {from: toAccount}) assert.equal(await tokenInstance.balanceOf(toAccount), transferAmount, 'To account should have 3') })