'Truffle Chai Assertion Error with Truffle Unit Cases

Problem: facing an issue with the below Truffle test case while trying to Implement the ERC20 token in my contract.

contract("Token Test", async(accounts) => {

const[deployerAccount, recipient, anotherAccount] = accounts;

it("All tokens should be in deployer's account", async() => {
    let instance = await Token.deployed();
    let totalSupply = await instance.totalSupply();
    // let balance = await instance.balanceOf(accounts[0]);
    // assert.equal(balance.valueOf(), totalSupply.valueOf(), "The Balance Was not same");

    expect(instance.balanceOf(deployerAccount)).to.eventually.be.a.bignumber.equal(totalSupply);
});

it("Is possible to send tokens between accounts", async() => {
    const sendToken = 1;
    let instance = await Token.deployed();
    let totalSupply = await instance.totalSupply();
    expect(instance.balanceOf(deployerAccount)).to.eventually.be.a.bignumber.equal(totalSupply);
    expect(instance.transfer(recipient, sendToken)).to.eventually.be.fulfilled;
    expect(instance.balanceOf(deployerAccount)).to.eventually.be.a.bignumber.equal(totalSupply.sub(new BN(sendToken)));
    expect(instance.balanceOf(recipient)).to.eventually.be.a.bignumber.equal(new BN(sendToken));
}); 

it("Should not be able to send more token than available with owner", async() => {
    let instance = await Token.deployed();
    let balanceOfDeployer = await instance.balanceOf(deployerAccount);
    console.log(balanceOfDeployer+ " : " + await instance.balanceOf(deployerAccount));
    // expect(instance.transfer(recipient, new BN(balanceOfDeployer+3))).to.eventually.be.rejected;

    expect(instance.balanceOf(deployerAccount)).to.eventually.be.a.bignumber.equal(balanceOfDeployer);
});

});

Description: When I am trying to execute test cases 2 and 3 at the same time it is failing with the below error:

"before all" hook: prepare suite for "Should not be able to send more token than available with owner":

  Uncaught AssertionError: expected '1000000000' to equal '999999999'
  + expected - actual

  -1000000000
  +999999999
  
  at /project_dir/node_modules/chai-as-promised/lib/chai-as-promised.js:302:22
  at processTicksAndRejections (internal/process/task_queues.js:95:5)



UnhandledRejections detected
Promise {
  <rejected> AssertionError: expected '1000000000' to equal '999999999'
      at /project_dir/node_modules/chai-as-promised/lib/chai-as-promised.js:302:22
      at processTicksAndRejections (internal/process/task_queues.js:95:5) {
    showDiff: true,
    actual: '1000000000',
    expected: '999999999',
    operator: 'strictEqual',
    uncaught: true
  }

However when I try to execute both test cases independently (commenting test case 2 keeping 3, and vice-versa). They work fine and are completed without any error.

Need help understanding what am I missing here and how to fix it.

Things I have tried: Initially, I thought that this is might be happening due to state change in the variable in test case 2. So I moved test case 3 to a new contract(). But I was still facing the same issue. However, this should not be happening as contract() provides a clean room environment before executing every contract test.

P.S.: I am initiating the value of totalSupply to 1000000000 in the constructor of Contract.



Solution 1:[1]

Added await before every expect() where I was trying to communicate with the contract. This helped in resolving the issue.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ghatothkachh