source: frontend/node_modules/eslint-plugin-jest/lib/rules/prefer-spy-on.js

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

Fix frontend appearance

  • Property mode set to 100644
File size: 2.4 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 findNodeObject = node => {
13 if ('object' in node) {
14 return node.object;
15 }
16
17 if (node.callee.type === _experimentalUtils.AST_NODE_TYPES.MemberExpression) {
18 return node.callee.object;
19 }
20
21 return null;
22};
23
24const getJestFnCall = node => {
25 if (node.type !== _experimentalUtils.AST_NODE_TYPES.CallExpression && node.type !== _experimentalUtils.AST_NODE_TYPES.MemberExpression) {
26 return null;
27 }
28
29 const obj = findNodeObject(node);
30
31 if (!obj) {
32 return null;
33 }
34
35 if (obj.type === _experimentalUtils.AST_NODE_TYPES.Identifier) {
36 return node.type === _experimentalUtils.AST_NODE_TYPES.CallExpression && (0, _utils.getNodeName)(node.callee) === 'jest.fn' ? node : null;
37 }
38
39 return getJestFnCall(obj);
40};
41
42var _default = (0, _utils.createRule)({
43 name: __filename,
44 meta: {
45 docs: {
46 category: 'Best Practices',
47 description: 'Suggest using `jest.spyOn()`',
48 recommended: false
49 },
50 messages: {
51 useJestSpyOn: 'Use jest.spyOn() instead.'
52 },
53 fixable: 'code',
54 schema: [],
55 type: 'suggestion'
56 },
57 defaultOptions: [],
58
59 create(context) {
60 return {
61 AssignmentExpression(node) {
62 const {
63 left,
64 right
65 } = node;
66 if (left.type !== _experimentalUtils.AST_NODE_TYPES.MemberExpression) return;
67 const jestFnCall = getJestFnCall(right);
68 if (!jestFnCall) return;
69 context.report({
70 node,
71 messageId: 'useJestSpyOn',
72
73 fix(fixer) {
74 const leftPropQuote = left.property.type === _experimentalUtils.AST_NODE_TYPES.Identifier ? "'" : '';
75 const [arg] = jestFnCall.arguments;
76 const argSource = arg && context.getSourceCode().getText(arg);
77 const mockImplementation = argSource ? `.mockImplementation(${argSource})` : '.mockImplementation()';
78 return [fixer.insertTextBefore(left, `jest.spyOn(`), fixer.replaceTextRange([left.object.range[1], left.property.range[0]], `, ${leftPropQuote}`), fixer.replaceTextRange([left.property.range[1], jestFnCall.range[1]], `${leftPropQuote})${mockImplementation}`)];
79 }
80
81 });
82 }
83
84 };
85 }
86
87});
88
89exports.default = _default;
Note: See TracBrowser for help on using the repository browser.