var expectedExceptionPromise = function (action, gasToUse) { return new Promise(function (resolve, reject) { try { resolve(action()); } catch(e) { reject(e); } }) .then(function (txn) { // https://gist.github.com/xavierlepretre/88682e871f4ad07be4534ae560692ee6 return web3.eth.getTransactionReceiptMined(txn); }) .then(function (receipt) { // We are in Geth assert.equal(receipt.gasUsed, gasToUse, "should have used all the gas"); }) .catch(function (e) { console.log(e); if ((e + "").indexOf("invalid JUMP") > -1) { // We are in TestRPC } else { throw e; } }); };