Skip to content

Commit 98448bb

Browse files
committed
feat(no-wait-for-multiple-assertions): report assertions
1 parent 06b437c commit 98448bb

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

lib/rules/no-wait-for-multiple-assertions.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { TSESTree } from '@typescript-eslint/experimental-utils';
2-
import { getPropertyIdentifierNode } from '../node-utils';
2+
import {
3+
getPropertyIdentifierNode,
4+
isExpressionStatement,
5+
} from '../node-utils';
36
import { createTestingLibraryRule } from '../create-testing-library-rule';
47

58
export const RULE_NAME = 'no-wait-for-multiple-assertions';
@@ -24,16 +27,21 @@ export default createTestingLibraryRule<Options, MessageIds>({
2427
},
2528
defaultOptions: [],
2629
create: function (context, _, helpers) {
27-
function totalExpect(body: Array<TSESTree.Node>): Array<TSESTree.Node> {
28-
return body.filter((node: TSESTree.ExpressionStatement) => {
29-
const expressionIdentifier = getPropertyIdentifierNode(node);
30+
function getExpectNodes(
31+
body: Array<TSESTree.Node>
32+
): Array<TSESTree.ExpressionStatement> {
33+
return body.filter((node: TSESTree.Node) => {
34+
if (!isExpressionStatement(node)) {
35+
return false;
36+
}
3037

38+
const expressionIdentifier = getPropertyIdentifierNode(node);
3139
if (!expressionIdentifier) {
3240
return false;
3341
}
3442

3543
return expressionIdentifier.name === 'expect';
36-
});
44+
}) as Array<TSESTree.ExpressionStatement>;
3745
}
3846

3947
function reportMultipleAssertion(node: TSESTree.BlockStatement) {
@@ -46,14 +54,20 @@ export default createTestingLibraryRule<Options, MessageIds>({
4654
return;
4755
}
4856

49-
if (totalExpect(node.body).length <= 1) {
57+
const expectNodes = getExpectNodes(node.body);
58+
59+
if (expectNodes.length <= 1) {
5060
return;
5161
}
5262

53-
context.report({
54-
node: callExpressionNode,
55-
messageId: 'noWaitForMultipleAssertion',
56-
});
63+
for (let i = 0; i < expectNodes.length; i++) {
64+
if (i !== 0) {
65+
context.report({
66+
node: expectNodes[i],
67+
messageId: 'noWaitForMultipleAssertion',
68+
});
69+
}
70+
}
5771
}
5872

5973
return {

tests/lib/rules/no-wait-for-multiple-assertions.test.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ ruleTester.run(RULE_NAME, rule, {
100100
})
101101
`,
102102
errors: [
103-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
103+
{ line: 4, column: 11, messageId: 'noWaitForMultipleAssertion' },
104104
],
105105
},
106106
{
@@ -113,7 +113,7 @@ ruleTester.run(RULE_NAME, rule, {
113113
})
114114
`,
115115
errors: [
116-
{ line: 3, column: 15, messageId: 'noWaitForMultipleAssertion' },
116+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
117117
],
118118
},
119119
{
@@ -126,7 +126,7 @@ ruleTester.run(RULE_NAME, rule, {
126126
})
127127
`,
128128
errors: [
129-
{ line: 3, column: 15, messageId: 'noWaitForMultipleAssertion' },
129+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
130130
],
131131
},
132132
{
@@ -138,7 +138,7 @@ ruleTester.run(RULE_NAME, rule, {
138138
})
139139
`,
140140
errors: [
141-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
141+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
142142
],
143143
},
144144
{
@@ -152,7 +152,7 @@ ruleTester.run(RULE_NAME, rule, {
152152
})
153153
`,
154154
errors: [
155-
{ line: 3, column: 17, messageId: 'noWaitForMultipleAssertion' },
155+
{ line: 6, column: 13, messageId: 'noWaitForMultipleAssertion' },
156156
],
157157
},
158158
{
@@ -164,18 +164,22 @@ ruleTester.run(RULE_NAME, rule, {
164164
})
165165
`,
166166
errors: [
167-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
167+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
168168
],
169169
},
170170
{
171171
code: `
172172
await waitFor(function() {
173173
expect(a).toEqual('a')
174174
expect(b).toEqual('b')
175+
expect(c).toEqual('c')
176+
expect(d).toEqual('d')
175177
})
176178
`,
177179
errors: [
178-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
180+
{ line: 4, column: 11, messageId: 'noWaitForMultipleAssertion' },
181+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
182+
{ line: 6, column: 11, messageId: 'noWaitForMultipleAssertion' },
179183
],
180184
},
181185
{
@@ -187,7 +191,7 @@ ruleTester.run(RULE_NAME, rule, {
187191
})
188192
`,
189193
errors: [
190-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
194+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
191195
],
192196
},
193197
{
@@ -199,7 +203,7 @@ ruleTester.run(RULE_NAME, rule, {
199203
})
200204
`,
201205
errors: [
202-
{ line: 2, column: 15, messageId: 'noWaitForMultipleAssertion' },
206+
{ line: 5, column: 11, messageId: 'noWaitForMultipleAssertion' },
203207
],
204208
},
205209
],

0 commit comments

Comments
 (0)