You can use OpenZeppelin's expectThrow helper -
Source: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/test/helpers/expectThrow.js
export default async promise => {
try {
await promise;
} catch (error) {
// TODO: Check jump destination to destinguish between a throw
// and an actual invalid jump.
const invalidJump = error.message.search('invalid JUMP') >= 0;
// TODO: When we contract A calls contract B, and B throws, instead
// of an 'invalid jump', we get an 'out of gas' error. How do
// we distinguish this from an actual out of gas event? (The
// testrpc log actually show an 'invalid jump' event.)
const outOfGas = error.message.search('out of gas') >= 0;
assert(
invalidJump || outOfGas,
"Expected throw, got '" + error + "' instead",
);
return;
}
assert.fail('Expected throw not received');
};
I use it my test cases like this -
import expectThrow from './helpers/expectThrow';
.
.
.
describe('borrowBook', function() {
it("should not allow borrowing book if value send is less than 100", async function() {
await lms.addBook('a', 'b', 'c', 'e', 'f', 'g');
await lms.addMember('Michael Scofield', accounts[2], "[email protected]");
await lms.borrowBook(1, {from: accounts[2], value: 10**12})
await expectThrow(lms.borrowBook(1, {from: accounts[2], value: 10000})); // should throw exception
});
});