Forked from xavierlepretre/expected_exception_testRPC_and_geth.js
Created
May 6, 2019 22:15
-
-
Save JCGit2018/9f79d5ef6b966f193987ae707c271856 to your computer and use it in GitHub Desktop.
When TestRPC and Geth throw, they behave in a different manner. This Gist is an example on how to cover such a situation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module.exports = function expectedExceptionPromise(action, gasToUse) { | |
| return new Promise(function (resolve, reject) { | |
| try { | |
| resolve(action()); | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }) | |
| .then(function (txObj) { | |
| return typeof txn === "string" | |
| ? web3.eth.getTransactionReceiptMined(txObj) // regular tx hash | |
| : typeof txObj.receipt !== "undefined" | |
| ? txObj.receipt // truffle-contract function call | |
| : typeof txObj.transactionHash === "string" | |
| ? web3.eth.getTransactionReceiptMined(txObj.transactionHash) // deployment | |
| : txObj; // Unknown last case | |
| }) | |
| .then(function (receipt) { | |
| // We are in Geth | |
| if (typeof receipt.status !== "undefined") { | |
| // Byzantium | |
| assert.strictEqual(receipt.status, "0x0", "should have reverted"); | |
| } else { | |
| // Pre Byzantium | |
| assert.equal(receipt.gasUsed, gasToUse, "should have used all the gas"); | |
| } | |
| }) | |
| .catch(function (e) { | |
| if ((e + "").indexOf("invalid JUMP") > -1 || | |
| (e + "").indexOf("out of gas") > -1 || | |
| (e + "").indexOf("invalid opcode") > -1 || | |
| (e + "").indexOf("revert") > -1) { | |
| // We are in TestRPC | |
| } else if ((e + "").indexOf("please check your gas amount") > -1) { | |
| // We are in Geth for a deployment | |
| } else { | |
| throw e; | |
| } | |
| }); | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment