diff --git a/lib/test.js b/lib/test.js index 18636c9..d5bbc80 100644 --- a/lib/test.js +++ b/lib/test.js @@ -7,6 +7,7 @@ var co = require('co-with-promise'); var observableToPromise = require('observable-to-promise'); var isPromise = require('is-promise'); var isObservable = require('is-observable'); +var inspect = require('util').inspect; var assert = require('./assert'); var enhanceAssert = require('./enhance-assert'); var globals = require('./globals'); @@ -70,10 +71,6 @@ Test.prototype._setAssertError = function (err) { return; } - if (err === undefined) { - err = 'undefined'; - } - this.assertError = err; }; @@ -95,7 +92,15 @@ Test.prototype._run = function () { try { ret = this.fn(this._publicApi()); } catch (err) { - this._setAssertError(err); + if (err instanceof Error) { + this._setAssertError(err); + } else { + this._setAssertError(new assert.AssertionError({ + actual: err, + message: 'Non-error thrown with value: ' + inspect(err, {depth: null}), + operator: 'catch' + })); + } } return ret; diff --git a/test/test.js b/test/test.js index 194433b..109daed 100644 --- a/test/test.js +++ b/test/test.js @@ -356,17 +356,24 @@ test('fails with thrown falsy value', function (t) { }).run(); t.is(result.passed, false); - t.is(result.reason, 0); + t.is(result.reason.actual, 0); + t.is(result.reason.message, 'Non-error thrown with value: 0'); + t.is(result.reason.name, 'AssertionError'); + t.is(result.reason.operator, 'catch'); t.end(); }); -test('throwing undefined will be converted to string "undefined"', function (t) { +test('fails with thrown non-error object', function (t) { + var obj = {foo: 'bar'}; var result = ava(function () { - throw undefined; // eslint-disable-line no-throw-literal + throw obj; }).run(); t.is(result.passed, false); - t.is(result.reason, 'undefined'); + t.is(result.reason.actual, obj); + t.is(result.reason.message, 'Non-error thrown with value: { foo: \'bar\' }'); + t.is(result.reason.name, 'AssertionError'); + t.is(result.reason.operator, 'catch'); t.end(); });