Skip to content

Commit 829f91c

Browse files
committed
Merge pull request #576 from kasperlewau/throws-return
Return thrown error/rejected promise from t.throws
2 parents c94c6de + e03b82c commit 829f91c

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

lib/assert.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ x.throws = function (fn, err, msg) {
7878
.then(function () {
7979
x.throws(noop, err, msg);
8080
}, function (fnErr) {
81-
x.throws(function () {
81+
return x.throws(function () {
8282
throw fnErr;
8383
}, err, msg);
8484
});
@@ -92,7 +92,18 @@ x.throws = function (fn, err, msg) {
9292
};
9393
}
9494

95-
assert.throws(fn, err, msg);
95+
var result;
96+
97+
assert.throws(function () {
98+
try {
99+
fn();
100+
} catch (error) {
101+
result = error;
102+
throw error;
103+
}
104+
}, err, msg);
105+
106+
return result;
96107
} catch (err) {
97108
test(false, create(err.actual, err.expected, err.operator, err.message, x.throws));
98109
}

readme.md

+2
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,8 @@ Assert that `function` throws an error, or `promise` rejects with an error.
566566

567567
`error` can be a constructor, regex, error message or validation function.
568568

569+
Returns the error thrown by `function` or the rejection reason of `promise`.
570+
569571
### .notThrows(function|promise, [message])
570572

571573
Assert that `function` doesn't throw an `error` or `promise` resolves.

test/assert.js

+21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22
var test = require('tap').test;
3+
var Promise = require('bluebird');
34
var assert = require('../lib/assert');
45

56
test('.pass()', function (t) {
@@ -182,6 +183,26 @@ test('.throws()', function (t) {
182183
t.end();
183184
});
184185

186+
test('.throws() returns the thrown error', function (t) {
187+
var expected = new Error();
188+
var actual = assert.throws(function () {
189+
throw expected;
190+
});
191+
192+
t.is(actual, expected);
193+
194+
t.end();
195+
});
196+
197+
test('.throws() returns the rejection reason of promise', function (t) {
198+
var expected = new Error();
199+
200+
assert.throws(Promise.reject(expected)).then(function (actual) {
201+
t.is(actual, expected);
202+
t.end();
203+
});
204+
});
205+
185206
test('.notThrows()', function (t) {
186207
t.doesNotThrow(function () {
187208
assert.notThrows(function () {});

0 commit comments

Comments
 (0)