Skip to content

Commit bc5a799

Browse files
jfmengelssindresorhus
authored andcommitted
assertion-arguments: Allow third argument for t.throws. Fixes #99 (#100)
1 parent 57e5ed2 commit bc5a799

File tree

2 files changed

+26
-31
lines changed

2 files changed

+26
-31
lines changed

rules/assertion-arguments.js

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,29 @@ var util = require('../util');
33
var createAvaRule = require('../create-ava-rule');
44

55
var expectedNbArguments = {
6-
deepEqual: 2,
7-
end: 0,
8-
fail: 0,
9-
false: 1,
10-
falsy: 1,
11-
ifError: 1,
12-
is: 2,
13-
not: 2,
14-
notDeepEqual: 2,
15-
notThrows: 1,
16-
pass: 0,
17-
plan: 1,
18-
regex: 2,
19-
throws: 1,
20-
true: 1,
21-
truthy: 1
22-
};
23-
24-
var fixedNbArguments = {
25-
end: true,
26-
plan: true
6+
deepEqual: {min: 2, max: 3},
7+
end: {min: 0, max: 0},
8+
fail: {min: 0, max: 1},
9+
false: {min: 1, max: 2},
10+
falsy: {min: 1, max: 2},
11+
ifError: {min: 1, max: 2},
12+
is: {min: 2, max: 3},
13+
not: {min: 2, max: 3},
14+
notDeepEqual: {min: 2, max: 3},
15+
notThrows: {min: 1, max: 2},
16+
pass: {min: 0, max: 1},
17+
plan: {min: 1, max: 1},
18+
regex: {min: 2, max: 3},
19+
throws: {min: 1, max: 3},
20+
true: {min: 1, max: 2},
21+
truthy: {min: 1, max: 2}
2722
};
2823

2924
function nbArguments(node) {
3025
var name = node.property.name;
3126
var nArgs = expectedNbArguments[name];
32-
if (nArgs !== undefined) {
33-
return {
34-
min: nArgs,
35-
max: fixedNbArguments[name] ? nArgs : nArgs + 1
36-
};
27+
if (nArgs) {
28+
return nArgs;
3729
}
3830

3931
if (node.object.type === 'MemberExpression') {
@@ -78,7 +70,7 @@ module.exports = function (context) {
7870
} else if (node.arguments.length > nArgs.max) {
7971
report(node, 'Too many arguments. Expected at most ' + nArgs.max + '.');
8072
} else if (enforcesMessage && nArgs.min !== nArgs.max) {
81-
var hasMessage = nArgs.max === gottenArgs;
73+
var hasMessage = gottenArgs === nArgs.max;
8274
if (!hasMessage && shouldHaveMessage) {
8375
report(node, 'Expected an assertion message, but found none.');
8476
} else if (hasMessage && !shouldHaveMessage) {

test/assertion-arguments.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ test(() => {
5050
testCase(false, `t.pass('message');`),
5151
testCase(false, `t.regex(a, /a/, 'message');`),
5252
testCase(false, `t.skip.is('same', 'same', 'message');`),
53-
testCase(false, `t.throws(Promise.reject(), 'message');`),
53+
testCase(false, `t.throws(Promise.reject(), Error, 'message');`),
5454
testCase(false, `t.true(true, 'message');`),
5555
testCase(false, `t.truthy('unicorn', 'message');`),
5656
// shouldn't be triggered since it's not a test file
@@ -70,6 +70,7 @@ test(() => {
7070
testCase(false, `t.regex(a, /a/);`),
7171
testCase(false, `t.skip.is('same', 'same');`),
7272
testCase(false, `t.throws(Promise.reject());`),
73+
testCase(false, `t.throws(Promise.reject(), Error);`),
7374
testCase(false, `t.true(true);`),
7475
testCase(false, `t.truthy('unicorn');`),
7576
// shouldn't be triggered since it's not a test file
@@ -91,7 +92,7 @@ test(() => {
9192
testCase('always', `t.not('not', 'same', 'message');`),
9293
testCase('always', `t.deepEqual({}, {}, 'message');`),
9394
testCase('always', `t.notDeepEqual({}, {a: true}, 'message');`),
94-
testCase('always', `t.throws(Promise.reject(), 'message');`),
95+
testCase('always', `t.throws(Promise.reject(), Error, 'message');`),
9596
testCase('always', `t.notThrows(Promise.resolve(), 'message');`),
9697
testCase('always', `t.regex(a, /a/, 'message');`),
9798
testCase('always', `t.ifError(new Error(), 'message');`),
@@ -117,6 +118,7 @@ test(() => {
117118
testCase('never', `t.deepEqual({}, {});`),
118119
testCase('never', `t.notDeepEqual({}, {a: true});`),
119120
testCase('never', `t.throws(Promise.reject());`),
121+
testCase('never', `t.throws(Promise.reject(), Error);`),
120122
testCase('never', `t.notThrows(Promise.resolve());`),
121123
testCase('never', `t.regex(a, /a/);`),
122124
testCase('never', `t.ifError(new Error());`),
@@ -160,7 +162,7 @@ test(() => {
160162
testCase(false, `t.not('not', 'same', 'message', 'extra argument');`, tooManyError(3)),
161163
testCase(false, `t.deepEqual({}, {}, 'message', 'extra argument');`, tooManyError(3)),
162164
testCase(false, `t.notDeepEqual({}, {a: true}, 'message', 'extra argument');`, tooManyError(3)),
163-
testCase(false, `t.throws(Promise.reject(), 'message', 'extra argument');`, tooManyError(2)),
165+
testCase(false, `t.throws(Promise.reject(), Error, 'message', 'extra argument');`, tooManyError(3)),
164166
testCase(false, `t.notThrows(Promise.resolve(), 'message', 'extra argument');`, tooManyError(2)),
165167
testCase(false, `t.regex(a, /a/, 'message', 'extra argument');`, tooManyError(3)),
166168
testCase(false, `t.ifError(new Error(), 'message', 'extra argument');`, tooManyError(2)),
@@ -178,6 +180,7 @@ test(() => {
178180
testCase('always', `t.deepEqual({}, {});`, missingError),
179181
testCase('always', `t.notDeepEqual({}, {a: true});`, missingError),
180182
testCase('always', `t.throws(Promise.reject());`, missingError),
183+
testCase('always', `t.throws(Promise.reject(), Error);`, missingError),
181184
testCase('always', `t.notThrows(Promise.resolve());`, missingError),
182185
testCase('always', `t.regex(a, /a/);`, missingError),
183186
testCase('always', `t.ifError(new Error());`, missingError),
@@ -194,7 +197,7 @@ test(() => {
194197
testCase('never', `t.not('not', 'same', 'message');`, foundError),
195198
testCase('never', `t.deepEqual({}, {}, 'message');`, foundError),
196199
testCase('never', `t.notDeepEqual({}, {a: true}, 'message');`, foundError),
197-
testCase('never', `t.throws(Promise.reject(), 'message');`, foundError),
200+
testCase('never', `t.throws(Promise.reject(), Error, 'message');`, foundError),
198201
testCase('never', `t.notThrows(Promise.resolve(), 'message');`, foundError),
199202
testCase('never', `t.regex(a, /a/, 'message');`, foundError),
200203
testCase('never', `t.ifError(new Error(), 'message');`, foundError),

0 commit comments

Comments
 (0)