UNPKG

2.05 kBJavaScriptView Raw
1'use strict';
2
3const { getDocsUrl, getNodeName, scopeHasLocalReference } = require('./util');
4
5module.exports = {
6 meta: {
7 docs: {
8 url: getDocsUrl(__filename),
9 },
10 },
11 create(context) {
12 let suiteDepth = 0;
13 let testDepth = 0;
14
15 return {
16 'CallExpression[callee.name="describe"]'() {
17 suiteDepth++;
18 },
19 'CallExpression[callee.name=/^(it|test)$/]'() {
20 testDepth++;
21 },
22 'CallExpression[callee.name=/^(it|test)$/][arguments.length<2]'(node) {
23 context.report({
24 message: 'Test is missing function argument',
25 node,
26 });
27 },
28 CallExpression(node) {
29 const functionName = getNodeName(node.callee);
30
31 switch (functionName) {
32 case 'describe.skip':
33 context.report({ message: 'Skipped test suite', node });
34 break;
35
36 case 'it.skip':
37 case 'test.skip':
38 context.report({ message: 'Skipped test', node });
39 break;
40 }
41 },
42 'CallExpression[callee.name="pending"]'(node) {
43 if (scopeHasLocalReference(context.getScope(), 'pending')) {
44 return;
45 }
46
47 if (testDepth > 0) {
48 context.report({
49 message: 'Call to pending() within test',
50 node,
51 });
52 } else if (suiteDepth > 0) {
53 context.report({
54 message: 'Call to pending() within test suite',
55 node,
56 });
57 } else {
58 context.report({
59 message: 'Call to pending()',
60 node,
61 });
62 }
63 },
64 'CallExpression[callee.name="xdescribe"]'(node) {
65 context.report({ message: 'Disabled test suite', node });
66 },
67 'CallExpression[callee.name=/^xit|xtest$/]'(node) {
68 context.report({ message: 'Disabled test', node });
69 },
70 'CallExpression[callee.name="describe"]:exit'() {
71 suiteDepth--;
72 },
73 'CallExpression[callee.name=/^it|test$/]:exit'() {
74 testDepth--;
75 },
76 };
77 },
78};