eslint-plugin-jest 28.0.0-next.1 → 28.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +0 -2
- package/lib/rules/consistent-test-it.js +3 -3
- package/lib/rules/expect-expect.js +1 -3
- package/lib/rules/max-expects.js +3 -7
- package/lib/rules/max-nested-describe.js +1 -3
- package/lib/rules/no-alias-methods.js +2 -4
- package/lib/rules/no-commented-out-tests.js +1 -3
- package/lib/rules/no-conditional-expect.js +1 -3
- package/lib/rules/no-conditional-in-test.js +1 -3
- package/lib/rules/no-confusing-set-timeout.js +1 -3
- package/lib/rules/no-deprecated-functions.js +2 -5
- package/lib/rules/no-disabled-tests.js +1 -3
- package/lib/rules/no-done-callback.js +5 -9
- package/lib/rules/no-duplicate-hooks.js +4 -7
- package/lib/rules/no-export.js +1 -3
- package/lib/rules/no-focused-tests.js +2 -4
- package/lib/rules/no-hooks.js +3 -4
- package/lib/rules/no-identical-title.js +1 -3
- package/lib/rules/no-interpolation-in-snapshots.js +2 -4
- package/lib/rules/no-jasmine-globals.js +1 -3
- package/lib/rules/no-large-snapshots.js +2 -4
- package/lib/rules/no-mocks-import.js +1 -3
- package/lib/rules/no-restricted-jest-methods.js +2 -4
- package/lib/rules/no-restricted-matchers.js +2 -4
- package/lib/rules/no-standalone-expect.js +6 -9
- package/lib/rules/no-test-prefixes.js +2 -4
- package/lib/rules/no-test-return-statement.js +1 -3
- package/lib/rules/no-untyped-mock-factory.js +10 -7
- package/lib/rules/prefer-called-with.js +2 -4
- package/lib/rules/prefer-comparison-matcher.js +4 -6
- package/lib/rules/prefer-each.js +1 -3
- package/lib/rules/prefer-equality-matcher.js +4 -6
- package/lib/rules/prefer-expect-assertions.js +6 -10
- package/lib/rules/prefer-expect-resolves.js +4 -6
- package/lib/rules/prefer-hooks-in-order.js +2 -4
- package/lib/rules/prefer-hooks-on-top.js +1 -3
- package/lib/rules/prefer-lowercase-title.js +4 -3
- package/lib/rules/prefer-mock-promise-shorthand.js +3 -6
- package/lib/rules/prefer-snapshot-hint.js +3 -5
- package/lib/rules/prefer-spy-on.js +2 -5
- package/lib/rules/prefer-strict-equal.js +2 -4
- package/lib/rules/prefer-to-be.js +3 -6
- package/lib/rules/prefer-to-contain.js +3 -5
- package/lib/rules/prefer-to-have-length.js +4 -6
- package/lib/rules/prefer-todo.js +2 -4
- package/lib/rules/require-hook.js +2 -5
- package/lib/rules/require-to-throw-message.js +2 -4
- package/lib/rules/require-top-level-describe.js +1 -3
- package/lib/rules/unbound-method.js +8 -9
- package/lib/rules/utils/misc.js +6 -18
- package/lib/rules/utils/parseJestFnCall.js +12 -16
- package/lib/rules/valid-describe-callback.js +2 -4
- package/lib/rules/valid-expect-in-promise.js +7 -11
- package/lib/rules/valid-expect.js +7 -14
- package/lib/rules/valid-title.js +3 -4
- package/package.json +4 -4
package/lib/index.js
CHANGED
|
@@ -8,8 +8,6 @@ var snapshotProcessor = _interopRequireWildcard(require("./processors/snapshot-p
|
|
|
8
8
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
9
9
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
// v5 of `@typescript-eslint/experimental-utils` removed this
|
|
12
|
-
|
|
13
11
|
// copied from https://github.com/babel/babel/blob/d8da63c929f2d28c401571e2a43166678c555bc4/packages/babel-helpers/src/helpers.js#L602-L606
|
|
14
12
|
/* istanbul ignore next */
|
|
15
13
|
const interopRequireDefault = obj => obj && obj.__esModule ? obj : {
|
|
@@ -11,9 +11,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
11
11
|
name: __filename,
|
|
12
12
|
meta: {
|
|
13
13
|
docs: {
|
|
14
|
-
|
|
15
|
-
description: 'Enforce `test` and `it` usage conventions',
|
|
16
|
-
recommended: false
|
|
14
|
+
description: 'Enforce `test` and `it` usage conventions'
|
|
17
15
|
},
|
|
18
16
|
fixable: 'code',
|
|
19
17
|
messages: {
|
|
@@ -24,9 +22,11 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
24
22
|
type: 'object',
|
|
25
23
|
properties: {
|
|
26
24
|
fn: {
|
|
25
|
+
type: 'string',
|
|
27
26
|
enum: [_utils2.TestCaseName.it, _utils2.TestCaseName.test]
|
|
28
27
|
},
|
|
29
28
|
withinDescribe: {
|
|
29
|
+
type: 'string',
|
|
30
30
|
enum: [_utils2.TestCaseName.it, _utils2.TestCaseName.test]
|
|
31
31
|
}
|
|
32
32
|
},
|
|
@@ -30,9 +30,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
30
30
|
name: __filename,
|
|
31
31
|
meta: {
|
|
32
32
|
docs: {
|
|
33
|
-
|
|
34
|
-
description: 'Enforce assertion to be made in a test body',
|
|
35
|
-
recommended: 'warn'
|
|
33
|
+
description: 'Enforce assertion to be made in a test body'
|
|
36
34
|
},
|
|
37
35
|
messages: {
|
|
38
36
|
noAssertions: 'Test has no assertions'
|
package/lib/rules/max-expects.js
CHANGED
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Enforces a maximum number assertion calls in a test body',
|
|
15
|
-
recommended: false
|
|
13
|
+
description: 'Enforces a maximum number assertion calls in a test body'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
exceededMaxAssertion: 'Too many assertion calls ({{ count }}) - maximum allowed is {{ max }}'
|
|
@@ -37,8 +35,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
37
35
|
}]) {
|
|
38
36
|
let count = 0;
|
|
39
37
|
const maybeResetCount = node => {
|
|
40
|
-
|
|
41
|
-
const isTestFn = ((_node$parent = node.parent) === null || _node$parent === void 0 ? void 0 : _node$parent.type) !== _utils.AST_NODE_TYPES.CallExpression || (0, _utils2.isTypeOfJestFnCall)(node.parent, context, ['test']);
|
|
38
|
+
const isTestFn = node.parent?.type !== _utils.AST_NODE_TYPES.CallExpression || (0, _utils2.isTypeOfJestFnCall)(node.parent, context, ['test']);
|
|
42
39
|
if (isTestFn) {
|
|
43
40
|
count = 0;
|
|
44
41
|
}
|
|
@@ -49,9 +46,8 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
49
46
|
ArrowFunctionExpression: maybeResetCount,
|
|
50
47
|
'ArrowFunctionExpression:exit': maybeResetCount,
|
|
51
48
|
CallExpression(node) {
|
|
52
|
-
var _jestFnCall$head$node;
|
|
53
49
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
54
|
-
if (
|
|
50
|
+
if (jestFnCall?.type !== 'expect' || jestFnCall.head.node.parent?.type === _utils.AST_NODE_TYPES.MemberExpression) {
|
|
55
51
|
return;
|
|
56
52
|
}
|
|
57
53
|
count += 1;
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Enforces a maximum depth to nested describe calls',
|
|
14
|
-
recommended: false
|
|
12
|
+
description: 'Enforces a maximum depth to nested describe calls'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
exceededMaxDepth: 'Too many nested describe calls ({{ depth }}) - maximum allowed is {{ max }}'
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Disallow alias methods',
|
|
14
|
-
recommended: 'error'
|
|
12
|
+
description: 'Disallow alias methods'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
replaceAlias: `Replace {{ alias }}() with its canonical name of {{ canonical }}()`
|
|
@@ -39,7 +37,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
39
37
|
return {
|
|
40
38
|
CallExpression(node) {
|
|
41
39
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
42
|
-
if (
|
|
40
|
+
if (jestFnCall?.type !== 'expect') {
|
|
43
41
|
return;
|
|
44
42
|
}
|
|
45
43
|
const {
|
|
@@ -12,9 +12,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
12
12
|
name: __filename,
|
|
13
13
|
meta: {
|
|
14
14
|
docs: {
|
|
15
|
-
|
|
16
|
-
description: 'Disallow commented out tests',
|
|
17
|
-
recommended: 'warn'
|
|
15
|
+
description: 'Disallow commented out tests'
|
|
18
16
|
},
|
|
19
17
|
messages: {
|
|
20
18
|
commentedTests: 'Some tests seem to be commented'
|
|
@@ -11,9 +11,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
11
11
|
name: __filename,
|
|
12
12
|
meta: {
|
|
13
13
|
docs: {
|
|
14
|
-
description: 'Disallow calling `expect` conditionally'
|
|
15
|
-
category: 'Best Practices',
|
|
16
|
-
recommended: 'error'
|
|
14
|
+
description: 'Disallow calling `expect` conditionally'
|
|
17
15
|
},
|
|
18
16
|
messages: {
|
|
19
17
|
conditionalExpect: 'Avoid calling `expect` conditionally`'
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
description: 'Disallow conditional logic in tests'
|
|
13
|
-
category: 'Best Practices',
|
|
14
|
-
recommended: false
|
|
12
|
+
description: 'Disallow conditional logic in tests'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
conditionalInTest: 'Avoid having conditionals in tests'
|
|
@@ -12,9 +12,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
12
12
|
name: __filename,
|
|
13
13
|
meta: {
|
|
14
14
|
docs: {
|
|
15
|
-
|
|
16
|
-
description: 'Disallow confusing usages of jest.setTimeout',
|
|
17
|
-
recommended: false
|
|
15
|
+
description: 'Disallow confusing usages of jest.setTimeout'
|
|
18
16
|
},
|
|
19
17
|
messages: {
|
|
20
18
|
globalSetTimeout: '`jest.setTimeout` should be call in `global` scope',
|
|
@@ -17,9 +17,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
17
17
|
name: __filename,
|
|
18
18
|
meta: {
|
|
19
19
|
docs: {
|
|
20
|
-
|
|
21
|
-
description: 'Disallow use of deprecated functions',
|
|
22
|
-
recommended: 'error'
|
|
20
|
+
description: 'Disallow use of deprecated functions'
|
|
23
21
|
},
|
|
24
22
|
messages: {
|
|
25
23
|
deprecatedFunction: '`{{ deprecation }}` has been deprecated in favor of `{{ replacement }}`'
|
|
@@ -30,8 +28,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
30
28
|
},
|
|
31
29
|
defaultOptions: [],
|
|
32
30
|
create(context) {
|
|
33
|
-
|
|
34
|
-
const jestVersion = parseJestVersion(((_context$settings = context.settings) === null || _context$settings === void 0 || (_context$settings = _context$settings.jest) === null || _context$settings === void 0 ? void 0 : _context$settings.version) || (0, _utils2.detectJestVersion)());
|
|
31
|
+
const jestVersion = parseJestVersion(context.settings?.jest?.version || (0, _utils2.detectJestVersion)());
|
|
35
32
|
const deprecations = {
|
|
36
33
|
...(jestVersion >= 15 && {
|
|
37
34
|
'jest.resetModuleRegistry': 'jest.resetModules'
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Disallow disabled tests',
|
|
14
|
-
recommended: 'warn'
|
|
12
|
+
description: 'Disallow disabled tests'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
missingFunction: 'Test is missing function argument',
|
|
@@ -11,10 +11,10 @@ const findCallbackArg = (node, isJestEach, context) => {
|
|
|
11
11
|
return node.arguments[1];
|
|
12
12
|
}
|
|
13
13
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
14
|
-
if (
|
|
14
|
+
if (jestFnCall?.type === 'hook' && node.arguments.length >= 1) {
|
|
15
15
|
return node.arguments[0];
|
|
16
16
|
}
|
|
17
|
-
if (
|
|
17
|
+
if (jestFnCall?.type === 'test' && node.arguments.length >= 2) {
|
|
18
18
|
return node.arguments[1];
|
|
19
19
|
}
|
|
20
20
|
return null;
|
|
@@ -23,9 +23,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
23
23
|
name: __filename,
|
|
24
24
|
meta: {
|
|
25
25
|
docs: {
|
|
26
|
-
|
|
27
|
-
description: 'Disallow using a callback in asynchronous tests and hooks',
|
|
28
|
-
recommended: 'error'
|
|
26
|
+
description: 'Disallow using a callback in asynchronous tests and hooks'
|
|
29
27
|
},
|
|
30
28
|
messages: {
|
|
31
29
|
noDoneCallback: 'Return a Promise instead of relying on callback parameter',
|
|
@@ -40,9 +38,8 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
40
38
|
create(context) {
|
|
41
39
|
return {
|
|
42
40
|
CallExpression(node) {
|
|
43
|
-
var _getNodeName;
|
|
44
41
|
// done is the second argument for it.each, not the first
|
|
45
|
-
const isJestEach = (
|
|
42
|
+
const isJestEach = (0, _utils2.getNodeName)(node.callee)?.endsWith('.each') ?? false;
|
|
46
43
|
if (isJestEach && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression) {
|
|
47
44
|
// isJestEach but not a TaggedTemplateExpression, so this must be
|
|
48
45
|
// the `jest.each([])()` syntax which this rule doesn't support due
|
|
@@ -78,7 +75,6 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
78
75
|
callback: argument.name
|
|
79
76
|
},
|
|
80
77
|
fix(fixer) {
|
|
81
|
-
var _tokenAfterLastParam;
|
|
82
78
|
const {
|
|
83
79
|
body,
|
|
84
80
|
params
|
|
@@ -90,7 +86,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
90
86
|
const lastParam = params[params.length - 1];
|
|
91
87
|
const tokenBeforeFirstParam = sourceCode.getTokenBefore(firstParam);
|
|
92
88
|
let tokenAfterLastParam = sourceCode.getTokenAfter(lastParam);
|
|
93
|
-
if (
|
|
89
|
+
if (tokenAfterLastParam?.value === ',') {
|
|
94
90
|
tokenAfterLastParam = sourceCode.getTokenAfter(tokenAfterLastParam);
|
|
95
91
|
}
|
|
96
92
|
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Disallow duplicate setup and teardown hooks',
|
|
14
|
-
recommended: false
|
|
12
|
+
description: 'Disallow duplicate setup and teardown hooks'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
noDuplicateHook: 'Duplicate {{hook}} in describe block'
|
|
@@ -24,16 +22,15 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
24
22
|
const hookContexts = [{}];
|
|
25
23
|
return {
|
|
26
24
|
CallExpression(node) {
|
|
27
|
-
var _jestFnCall$name;
|
|
28
25
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
29
|
-
if (
|
|
26
|
+
if (jestFnCall?.type === 'describe') {
|
|
30
27
|
hookContexts.push({});
|
|
31
28
|
}
|
|
32
|
-
if (
|
|
29
|
+
if (jestFnCall?.type !== 'hook') {
|
|
33
30
|
return;
|
|
34
31
|
}
|
|
35
32
|
const currentLayer = hookContexts[hookContexts.length - 1];
|
|
36
|
-
currentLayer[
|
|
33
|
+
currentLayer[jestFnCall.name] ||= 0;
|
|
37
34
|
currentLayer[jestFnCall.name] += 1;
|
|
38
35
|
if (currentLayer[jestFnCall.name] > 1) {
|
|
39
36
|
context.report({
|
package/lib/rules/no-export.js
CHANGED
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Disallow using `exports` in files containing tests',
|
|
15
|
-
recommended: 'error'
|
|
13
|
+
description: 'Disallow using `exports` in files containing tests'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
unexpectedExport: `Do not export from a test file`
|
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Disallow focused tests',
|
|
15
|
-
recommended: 'error'
|
|
13
|
+
description: 'Disallow focused tests'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
focusedTest: 'Unexpected focused test',
|
|
@@ -27,7 +25,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
27
25
|
return {
|
|
28
26
|
CallExpression(node) {
|
|
29
27
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
30
|
-
if (
|
|
28
|
+
if (jestFnCall?.type !== 'test' && jestFnCall?.type !== 'describe') {
|
|
31
29
|
return;
|
|
32
30
|
}
|
|
33
31
|
if (jestFnCall.name.startsWith('f')) {
|
package/lib/rules/no-hooks.js
CHANGED
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Disallow setup and teardown hooks',
|
|
14
|
-
recommended: false
|
|
12
|
+
description: 'Disallow setup and teardown hooks'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
unexpectedHook: "Unexpected '{{ hookName }}' hook"
|
|
@@ -21,6 +19,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
21
19
|
properties: {
|
|
22
20
|
allow: {
|
|
23
21
|
type: 'array',
|
|
22
|
+
// @ts-expect-error https://github.com/eslint/eslint/discussions/17573
|
|
24
23
|
contains: ['beforeAll', 'beforeEach', 'afterAll', 'afterEach']
|
|
25
24
|
}
|
|
26
25
|
},
|
|
@@ -37,7 +36,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
37
36
|
return {
|
|
38
37
|
CallExpression(node) {
|
|
39
38
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
40
|
-
if (
|
|
39
|
+
if (jestFnCall?.type === 'hook' && !allow.includes(jestFnCall.name)) {
|
|
41
40
|
context.report({
|
|
42
41
|
node,
|
|
43
42
|
messageId: 'unexpectedHook',
|
|
@@ -13,9 +13,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
13
13
|
name: __filename,
|
|
14
14
|
meta: {
|
|
15
15
|
docs: {
|
|
16
|
-
|
|
17
|
-
description: 'Disallow identical titles',
|
|
18
|
-
recommended: 'error'
|
|
16
|
+
description: 'Disallow identical titles'
|
|
19
17
|
},
|
|
20
18
|
messages: {
|
|
21
19
|
multipleTestTitle: 'Test title is used multiple times in the same describe block',
|
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Disallow string interpolation inside snapshots',
|
|
15
|
-
recommended: 'error'
|
|
13
|
+
description: 'Disallow string interpolation inside snapshots'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
noInterpolation: 'Do not use string interpolation inside of snapshots'
|
|
@@ -25,7 +23,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
25
23
|
return {
|
|
26
24
|
CallExpression(node) {
|
|
27
25
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
28
|
-
if (
|
|
26
|
+
if (jestFnCall?.type !== 'expect') {
|
|
29
27
|
return;
|
|
30
28
|
}
|
|
31
29
|
if (['toMatchInlineSnapshot', 'toThrowErrorMatchingInlineSnapshot'].includes((0, _utils2.getAccessorValue)(jestFnCall.matcher))) {
|
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Disallow Jasmine globals',
|
|
15
|
-
recommended: 'error'
|
|
13
|
+
description: 'Disallow Jasmine globals'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
illegalGlobal: 'Illegal usage of global `{{ global }}`, prefer `{{ replacement }}`',
|
|
@@ -47,9 +47,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
47
47
|
name: __filename,
|
|
48
48
|
meta: {
|
|
49
49
|
docs: {
|
|
50
|
-
|
|
51
|
-
description: 'Disallow large snapshots',
|
|
52
|
-
recommended: false
|
|
50
|
+
description: 'Disallow large snapshots'
|
|
53
51
|
},
|
|
54
52
|
messages: {
|
|
55
53
|
noSnapshot: '`{{ lineCount }}`s should begin with lowercase',
|
|
@@ -87,7 +85,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
87
85
|
return {
|
|
88
86
|
CallExpression(node) {
|
|
89
87
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
90
|
-
if (
|
|
88
|
+
if (jestFnCall?.type !== 'expect') {
|
|
91
89
|
return;
|
|
92
90
|
}
|
|
93
91
|
if (['toMatchInlineSnapshot', 'toThrowErrorMatchingInlineSnapshot'].includes((0, _utils2.getAccessorValue)(jestFnCall.matcher)) && jestFnCall.args.length) {
|
|
@@ -14,9 +14,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
14
14
|
meta: {
|
|
15
15
|
type: 'problem',
|
|
16
16
|
docs: {
|
|
17
|
-
|
|
18
|
-
description: 'Disallow manually importing from `__mocks__`',
|
|
19
|
-
recommended: 'error'
|
|
17
|
+
description: 'Disallow manually importing from `__mocks__`'
|
|
20
18
|
},
|
|
21
19
|
messages: {
|
|
22
20
|
noManualImport: `Mocks should not be manually imported from a ${mocksDirName} directory. Instead use \`jest.mock\` and import from the original module path`
|
|
@@ -13,9 +13,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
13
13
|
name: __filename,
|
|
14
14
|
meta: {
|
|
15
15
|
docs: {
|
|
16
|
-
|
|
17
|
-
description: 'Disallow specific `jest.` methods',
|
|
18
|
-
recommended: false
|
|
16
|
+
description: 'Disallow specific `jest.` methods'
|
|
19
17
|
},
|
|
20
18
|
type: 'suggestion',
|
|
21
19
|
schema: [{
|
|
@@ -31,7 +29,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
31
29
|
return {
|
|
32
30
|
CallExpression(node) {
|
|
33
31
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
34
|
-
if (
|
|
32
|
+
if (jestFnCall?.type !== 'jest' || jestFnCall.members.length === 0) {
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
37
35
|
const method = (0, _utils.getAccessorValue)(jestFnCall.members[0]);
|
|
@@ -15,9 +15,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
15
15
|
name: __filename,
|
|
16
16
|
meta: {
|
|
17
17
|
docs: {
|
|
18
|
-
|
|
19
|
-
description: 'Disallow specific matchers & modifiers',
|
|
20
|
-
recommended: false
|
|
18
|
+
description: 'Disallow specific matchers & modifiers'
|
|
21
19
|
},
|
|
22
20
|
type: 'suggestion',
|
|
23
21
|
schema: [{
|
|
@@ -36,7 +34,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
36
34
|
return {
|
|
37
35
|
CallExpression(node) {
|
|
38
36
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
39
|
-
if (
|
|
37
|
+
if (jestFnCall?.type !== 'expect') {
|
|
40
38
|
return;
|
|
41
39
|
}
|
|
42
40
|
const chain = jestFnCall.members.map(nod => (0, _utils.getAccessorValue)(nod)).join('.');
|
|
@@ -37,15 +37,14 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
37
37
|
name: __filename,
|
|
38
38
|
meta: {
|
|
39
39
|
docs: {
|
|
40
|
-
|
|
41
|
-
description: 'Disallow using `expect` outside of `it` or `test` blocks',
|
|
42
|
-
recommended: 'error'
|
|
40
|
+
description: 'Disallow using `expect` outside of `it` or `test` blocks'
|
|
43
41
|
},
|
|
44
42
|
messages: {
|
|
45
43
|
unexpectedExpect: 'Expect must be inside of a test block'
|
|
46
44
|
},
|
|
47
45
|
type: 'suggestion',
|
|
48
46
|
schema: [{
|
|
47
|
+
type: 'object',
|
|
49
48
|
properties: {
|
|
50
49
|
additionalTestBlockFunctions: {
|
|
51
50
|
type: 'array',
|
|
@@ -68,9 +67,8 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
68
67
|
return {
|
|
69
68
|
CallExpression(node) {
|
|
70
69
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
if (((_jestFnCall$head$node = jestFnCall.head.node.parent) === null || _jestFnCall$head$node === void 0 ? void 0 : _jestFnCall$head$node.type) === _utils.AST_NODE_TYPES.MemberExpression && jestFnCall.members.length === 1 && !['assertions', 'hasAssertions'].includes((0, _utils2.getAccessorValue)(jestFnCall.members[0]))) {
|
|
70
|
+
if (jestFnCall?.type === 'expect') {
|
|
71
|
+
if (jestFnCall.head.node.parent?.type === _utils.AST_NODE_TYPES.MemberExpression && jestFnCall.members.length === 1 && !['assertions', 'hasAssertions'].includes((0, _utils2.getAccessorValue)(jestFnCall.members[0]))) {
|
|
74
72
|
return;
|
|
75
73
|
}
|
|
76
74
|
const parent = callStack[callStack.length - 1];
|
|
@@ -82,7 +80,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
82
80
|
}
|
|
83
81
|
return;
|
|
84
82
|
}
|
|
85
|
-
if (
|
|
83
|
+
if (jestFnCall?.type === 'test' || isCustomTestBlockFunction(node)) {
|
|
86
84
|
callStack.push('test');
|
|
87
85
|
}
|
|
88
86
|
if (node.callee.type === _utils.AST_NODE_TYPES.TaggedTemplateExpression) {
|
|
@@ -107,8 +105,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
107
105
|
}
|
|
108
106
|
},
|
|
109
107
|
ArrowFunctionExpression(node) {
|
|
110
|
-
|
|
111
|
-
if (((_node$parent = node.parent) === null || _node$parent === void 0 ? void 0 : _node$parent.type) !== _utils.AST_NODE_TYPES.CallExpression) {
|
|
108
|
+
if (node.parent?.type !== _utils.AST_NODE_TYPES.CallExpression) {
|
|
112
109
|
callStack.push('arrow');
|
|
113
110
|
}
|
|
114
111
|
},
|
|
@@ -10,9 +10,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
10
10
|
name: __filename,
|
|
11
11
|
meta: {
|
|
12
12
|
docs: {
|
|
13
|
-
|
|
14
|
-
description: 'Require using `.only` and `.skip` over `f` and `x`',
|
|
15
|
-
recommended: 'error'
|
|
13
|
+
description: 'Require using `.only` and `.skip` over `f` and `x`'
|
|
16
14
|
},
|
|
17
15
|
messages: {
|
|
18
16
|
usePreferredName: 'Use "{{ preferredNodeName }}" instead'
|
|
@@ -26,7 +24,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
26
24
|
return {
|
|
27
25
|
CallExpression(node) {
|
|
28
26
|
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
|
|
29
|
-
if (
|
|
27
|
+
if (jestFnCall?.type !== 'describe' && jestFnCall?.type !== 'test') {
|
|
30
28
|
return;
|
|
31
29
|
}
|
|
32
30
|
if (jestFnCall.name[0] !== 'f' && jestFnCall.name[0] !== 'x') {
|
|
@@ -17,9 +17,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
17
17
|
name: __filename,
|
|
18
18
|
meta: {
|
|
19
19
|
docs: {
|
|
20
|
-
|
|
21
|
-
description: 'Disallow explicitly returning from tests',
|
|
22
|
-
recommended: false
|
|
20
|
+
description: 'Disallow explicitly returning from tests'
|
|
23
21
|
},
|
|
24
22
|
messages: {
|
|
25
23
|
noReturnValue: 'Jest tests should not return a value'
|
|
@@ -16,9 +16,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
16
16
|
name: __filename,
|
|
17
17
|
meta: {
|
|
18
18
|
docs: {
|
|
19
|
-
|
|
20
|
-
description: 'Disallow using `jest.mock()` factories without an explicit type parameter',
|
|
21
|
-
recommended: false
|
|
19
|
+
description: 'Disallow using `jest.mock()` factories without an explicit type parameter'
|
|
22
20
|
},
|
|
23
21
|
messages: {
|
|
24
22
|
addTypeParameterToModuleMock: 'Add a type parameter to the mock factory such as `typeof import({{ moduleName }})`'
|
|
@@ -31,10 +29,15 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
31
29
|
create(context) {
|
|
32
30
|
return {
|
|
33
31
|
CallExpression(node) {
|
|
34
|
-
|
|
32
|
+
let {
|
|
35
33
|
callee,
|
|
36
|
-
|
|
34
|
+
typeArguments
|
|
37
35
|
} = node;
|
|
36
|
+
|
|
37
|
+
/* istanbul ignore next */
|
|
38
|
+
if (!('typeArguments' in node)) {
|
|
39
|
+
typeArguments = node.typeParameters;
|
|
40
|
+
}
|
|
38
41
|
if (callee.type !== _utils.AST_NODE_TYPES.MemberExpression) {
|
|
39
42
|
return;
|
|
40
43
|
}
|
|
@@ -43,7 +46,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
43
46
|
} = callee;
|
|
44
47
|
if (node.arguments.length === 2 && (0, _utils2.isTypeOfJestFnCall)(node, context, ['jest']) && (0, _utils2.isSupportedAccessor)(property) && ['mock', 'doMock'].includes((0, _utils2.getAccessorValue)(property))) {
|
|
45
48
|
const [nameNode, factoryNode] = node.arguments;
|
|
46
|
-
const hasTypeParameter =
|
|
49
|
+
const hasTypeParameter = typeArguments !== undefined && typeArguments.params.length > 0;
|
|
47
50
|
const hasReturnType = (0, _utils2.isFunction)(factoryNode) && factoryNode.returnType !== undefined;
|
|
48
51
|
if (hasTypeParameter || hasReturnType) {
|
|
49
52
|
return;
|
|
@@ -52,7 +55,7 @@ var _default = exports.default = (0, _utils2.createRule)({
|
|
|
52
55
|
context.report({
|
|
53
56
|
messageId: 'addTypeParameterToModuleMock',
|
|
54
57
|
data: {
|
|
55
|
-
moduleName:
|
|
58
|
+
moduleName: moduleName?.raw ?? './module-name'
|
|
56
59
|
},
|
|
57
60
|
node,
|
|
58
61
|
fix(fixer) {
|
|
@@ -9,9 +9,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
9
9
|
name: __filename,
|
|
10
10
|
meta: {
|
|
11
11
|
docs: {
|
|
12
|
-
|
|
13
|
-
description: 'Suggest using `toBeCalledWith()` or `toHaveBeenCalledWith()`',
|
|
14
|
-
recommended: false
|
|
12
|
+
description: 'Suggest using `toBeCalledWith()` or `toHaveBeenCalledWith()`'
|
|
15
13
|
},
|
|
16
14
|
messages: {
|
|
17
15
|
preferCalledWith: 'Prefer {{ matcherName }}With(/* expected args */)'
|
|
@@ -24,7 +22,7 @@ var _default = exports.default = (0, _utils.createRule)({
|
|
|
24
22
|
return {
|
|
25
23
|
CallExpression(node) {
|
|
26
24
|
const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
|
|
27
|
-
if (
|
|
25
|
+
if (jestFnCall?.type !== 'expect') {
|
|
28
26
|
return;
|
|
29
27
|
}
|
|
30
28
|
if (jestFnCall.modifiers.some(nod => (0, _utils.getAccessorValue)(nod) === 'not')) {
|