source: frontend/node_modules/eslint-plugin-jest/lib/rules/consistent-test-it.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.7 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _experimentalUtils = require("@typescript-eslint/experimental-utils");
9
10var _utils = require("./utils");
11
12const buildFixer = (callee, nodeName, preferredTestKeyword) => fixer => [fixer.replaceText(callee.type === _experimentalUtils.AST_NODE_TYPES.MemberExpression ? callee.object : callee, getPreferredNodeName(nodeName, preferredTestKeyword))];
13
14var _default = (0, _utils.createRule)({
15 name: __filename,
16 meta: {
17 docs: {
18 category: 'Best Practices',
19 description: 'Have control over `test` and `it` usages',
20 recommended: false
21 },
22 fixable: 'code',
23 messages: {
24 consistentMethod: "Prefer using '{{ testKeyword }}' instead of '{{ oppositeTestKeyword }}'",
25 consistentMethodWithinDescribe: "Prefer using '{{ testKeywordWithinDescribe }}' instead of '{{ oppositeTestKeyword }}' within describe"
26 },
27 schema: [{
28 type: 'object',
29 properties: {
30 fn: {
31 enum: [_utils.TestCaseName.it, _utils.TestCaseName.test]
32 },
33 withinDescribe: {
34 enum: [_utils.TestCaseName.it, _utils.TestCaseName.test]
35 }
36 },
37 additionalProperties: false
38 }],
39 type: 'suggestion'
40 },
41 defaultOptions: [{
42 fn: _utils.TestCaseName.test,
43 withinDescribe: _utils.TestCaseName.it
44 }],
45
46 create(context) {
47 const configObj = context.options[0] || {};
48 const testKeyword = configObj.fn || _utils.TestCaseName.test;
49 const testKeywordWithinDescribe = configObj.withinDescribe || configObj.fn || _utils.TestCaseName.it;
50 let describeNestingLevel = 0;
51 return {
52 CallExpression(node) {
53 const nodeName = (0, _utils.getNodeName)(node.callee);
54
55 if (!nodeName) {
56 return;
57 }
58
59 if ((0, _utils.isDescribeCall)(node)) {
60 describeNestingLevel++;
61 }
62
63 const funcNode = node.callee.type === _experimentalUtils.AST_NODE_TYPES.TaggedTemplateExpression ? node.callee.tag : node.callee.type === _experimentalUtils.AST_NODE_TYPES.CallExpression ? node.callee.callee : node.callee;
64
65 if ((0, _utils.isTestCaseCall)(node) && describeNestingLevel === 0 && !nodeName.includes(testKeyword)) {
66 const oppositeTestKeyword = getOppositeTestKeyword(testKeyword);
67 context.report({
68 messageId: 'consistentMethod',
69 node: node.callee,
70 data: {
71 testKeyword,
72 oppositeTestKeyword
73 },
74 fix: buildFixer(funcNode, nodeName, testKeyword)
75 });
76 }
77
78 if ((0, _utils.isTestCaseCall)(node) && describeNestingLevel > 0 && !nodeName.includes(testKeywordWithinDescribe)) {
79 const oppositeTestKeyword = getOppositeTestKeyword(testKeywordWithinDescribe);
80 context.report({
81 messageId: 'consistentMethodWithinDescribe',
82 node: node.callee,
83 data: {
84 testKeywordWithinDescribe,
85 oppositeTestKeyword
86 },
87 fix: buildFixer(funcNode, nodeName, testKeywordWithinDescribe)
88 });
89 }
90 },
91
92 'CallExpression:exit'(node) {
93 if ((0, _utils.isDescribeCall)(node)) {
94 describeNestingLevel--;
95 }
96 }
97
98 };
99 }
100
101});
102
103exports.default = _default;
104
105function getPreferredNodeName(nodeName, preferredTestKeyword) {
106 if (nodeName === _utils.TestCaseName.fit) {
107 return 'test.only';
108 }
109
110 return nodeName.startsWith('f') || nodeName.startsWith('x') ? nodeName.charAt(0) + preferredTestKeyword : preferredTestKeyword;
111}
112
113function getOppositeTestKeyword(test) {
114 if (test === _utils.TestCaseName.test) {
115 return _utils.TestCaseName.it;
116 }
117
118 return _utils.TestCaseName.test;
119}
Note: See TracBrowser for help on using the repository browser.