@ethereum-waffle/chai
Version:
A sweet set of chai matchers for your blockchain testing needs.
35 lines (31 loc) • 1.29 kB
text/typescript
import {callPromise} from '../call-promise';
export function supportReverted(Assertion: Chai.AssertionStatic) {
Assertion.addProperty('reverted', function (this: any) {
callPromise(this);
const onError = (error: any) => {
const message = (error instanceof Object && 'message' in error) ? error.message : JSON.stringify(error);
const isReverted = message.search('revert') >= 0;
const isThrown = message.search('invalid opcode') >= 0;
const isError = message.search('code=') >= 0;
this.assert(
isReverted || isThrown || isError,
`Expected transaction to be reverted, but other exception was thrown: ${error}`,
`Expected transaction NOT to be reverted, but it was reverted with "${message}"`,
'Transaction reverted.',
error
);
return error;
};
const assertNotReverted = () => this.assert(
false,
'Expected transaction to be reverted',
'Expected transaction NOT to be reverted',
'Transaction reverted.',
'Transaction NOT reverted.'
);
this.callPromise = this.callPromise.then(assertNotReverted, onError);
this.then = this.callPromise.then.bind(this.callPromise);
this.catch = this.callPromise.catch.bind(this.callPromise);
return this;
});
}