Hi,
I am trying to execute a test given at:
https://medium.com/@kscarbrough1/writing-solidity-unit-tests-for-testing-assert-require-and-revert-conditions-using-truffle-2e182d91a40fI am trying to run the test using truffle. At the "test" command, I get following errors:
truffle(development)> test
Using network 'development'.
Compiling .\contracts\Mycontract5.sol...
Compiling .\test\TestMyContract5.sol...
Compiling truffle/Assert.sol...
Compiling truffle/DeployedAddresses.sol...
TestMyContract5
1) testTheThrow
> No events were emitted
2) testNoThrow
> No events were emitted
0 passing (2s)
2 failing
1) TestMyContract5
testTheThrow:
Error: VM Exception while processing transaction: revert
at Object.InvalidResponse (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\errors.js:38:1)
at C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\requestmanager.js:86:1
at C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\truffle-provider\wrapper.js:134:1
at XMLHttpRequest.request.onreadystatechange (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\httpprovider.js:128:1)
at XMLHttpRequestEventTarget.dispatchEvent (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:64:1)
at XMLHttpRequest._setReadyState (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:354:1)
at XMLHttpRequest._onHttpResponseEnd (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:509:1)
at IncomingMessage. (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:469:1)
at IncomingMessage.EventEmitter.emit (domain.js:460:23)
at endReadableNT (_stream_readable.js:1092:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
2) TestMyContract5
testNoThrow:
Error: VM Exception while processing transaction: revert
at Object.InvalidResponse (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\errors.js:38:1)
at C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\requestmanager.js:86:1
at C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\truffle-provider\wrapper.js:134:1
at XMLHttpRequest.request.onreadystatechange (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\httpprovider.js:128:1)
at XMLHttpRequestEventTarget.dispatchEvent (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:64:1)
at XMLHttpRequest._setReadyState (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:354:1)
at XMLHttpRequest._onHttpResponseEnd (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:509:1)
at IncomingMessage. (C:\Users\HP\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:469:1)
at IncomingMessage.EventEmitter.emit (domain.js:460:23)
at endReadableNT (_stream_readable.js:1092:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
My test contract is:
pragma solidity ^0.4.22;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Mycontract5.sol";
contract TestMyContract5{
function testTheThrow() public {
MyContract5 mycontract = new MyContract5();
ThrowProxy throwproxy = new ThrowProxy(address(mycontract));
MyContract5(address(throwproxy)).storeNum(7);
bool r = throwproxy.execute.gas(200000)();
Assert.isFalse(r, "Should be false ecause is should throw!");
}
function testNoThrow() public {
MyContract5 mycontract = new MyContract5();
ThrowProxy throwproxy = new ThrowProxy(address(mycontract));
MyContract5(address(throwproxy)).storeNum(22);
bool r = throwproxy.execute.gas(200000)();
Assert.isFalse(r, "Should be false ecause is should throw!");
}
}
contract ThrowProxy{
address public target;
bytes data;
constructor (address _target) public {
target = _target;
}
function( ) public {
data = msg.data;
}
function execute( ) public returns (bool) {
return target.call(data);
}
}
and the contract being tested is:
pragma solidity ^0.4.22;
contract MyContract5{
uint public mynumber;
constructor ( ) public {
mynumber = 24;
}
function storeNum(uint mynum) public returns (bool success) {
require(mynum >10);
mynumber = mynum; //changing the internal state. If we are not changing state then function should //be declared as pure
return true;
}
}
Some body please guide me.
Zulfi.