eslint-plugin-jest 22.15.0 → 22.17.0

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.
Files changed (51) hide show
  1. package/README.md +42 -40
  2. package/docs/rules/prefer-to-be-null.md +7 -2
  3. package/docs/rules/prefer-to-be-undefined.md +7 -2
  4. package/docs/rules/prefer-to-contain.md +8 -10
  5. package/docs/rules/prefer-to-have-length.md +7 -3
  6. package/docs/rules/require-top-level-describe.md +52 -0
  7. package/lib/__tests__/rules.test.js +5 -4
  8. package/lib/index.js +2 -3
  9. package/lib/rules/consistent-test-it.js +7 -7
  10. package/lib/rules/expect-expect.js +3 -3
  11. package/lib/rules/lowercase-name.js +3 -3
  12. package/lib/rules/no-alias-methods.js +18 -14
  13. package/lib/rules/no-commented-out-tests.js +2 -2
  14. package/lib/rules/no-disabled-tests.js +4 -4
  15. package/lib/rules/no-duplicate-hooks.js +5 -5
  16. package/lib/rules/no-empty-title.js +8 -14
  17. package/lib/rules/no-expect-resolves.js +3 -3
  18. package/lib/rules/no-export.js +3 -3
  19. package/lib/rules/no-focused-tests.js +4 -4
  20. package/lib/rules/no-hooks.js +3 -3
  21. package/lib/rules/no-identical-title.js +9 -9
  22. package/lib/rules/no-if.js +5 -5
  23. package/lib/rules/no-jasmine-globals.js +4 -4
  24. package/lib/rules/no-jest-import.js +2 -2
  25. package/lib/rules/no-large-snapshots.js +25 -18
  26. package/lib/rules/no-mocks-import.js +18 -7
  27. package/lib/rules/no-standalone-expect.js +8 -8
  28. package/lib/rules/no-test-callback.js +5 -5
  29. package/lib/rules/no-test-prefixes.js +4 -4
  30. package/lib/rules/no-test-return-statement.js +4 -4
  31. package/lib/rules/no-truthy-falsy.js +31 -19
  32. package/lib/rules/no-try-expect.js +5 -5
  33. package/lib/rules/prefer-called-with.js +23 -11
  34. package/lib/rules/prefer-expect-assertions.js +45 -34
  35. package/lib/rules/prefer-inline-snapshots.js +2 -2
  36. package/lib/rules/prefer-spy-on.js +4 -4
  37. package/lib/rules/prefer-strict-equal.js +10 -12
  38. package/lib/rules/prefer-to-be-null.js +34 -16
  39. package/lib/rules/prefer-to-be-undefined.js +34 -16
  40. package/lib/rules/prefer-to-contain.js +112 -51
  41. package/lib/rules/prefer-to-have-length.js +47 -14
  42. package/lib/rules/prefer-todo.js +13 -17
  43. package/lib/rules/require-top-level-describe.js +66 -0
  44. package/lib/rules/require-tothrow-message.js +20 -15
  45. package/lib/rules/utils.js +486 -0
  46. package/lib/rules/valid-describe.js +36 -44
  47. package/lib/rules/valid-expect-in-promise.js +71 -66
  48. package/lib/rules/valid-expect.js +140 -173
  49. package/package.json +6 -5
  50. package/lib/rules/tsUtils.js +0 -250
  51. package/lib/rules/util.js +0 -100
package/README.md CHANGED
@@ -104,46 +104,47 @@ installations requiring long-term consistency.
104
104
 
105
105
  ## Rules
106
106
 
107
- | Rule | Description | Recommended | Fixable |
108
- | ---------------------------- | ----------------------------------------------------------------- | ---------------- | ------------------- |
109
- | [consistent-test-it][] | Enforce consistent test or it keyword | | ![fixable-green][] |
110
- | [expect-expect][] | Enforce assertion to be made in a test body | | |
111
- | [lowercase-name][] | Disallow capitalized test names | | ![fixable-green][] |
112
- | [no-alias-methods][] | Disallow alias methods | ![recommended][] | ![fixable-green][] |
113
- | [no-commented-out-tests][] | Disallow commented out tests | | |
114
- | [no-disabled-tests][] | Disallow disabled tests | ![recommended][] | |
115
- | [no-duplicate-hooks][] | Disallow duplicate hooks within a `describe` block | | |
116
- | [no-empty-title][] | Disallow empty titles | | |
117
- | [no-expect-resolves][] | Disallow using `expect().resolves` | | |
118
- | [no-export][] | Disallow export from test files | | |
119
- | [no-focused-tests][] | Disallow focused tests | ![recommended][] | |
120
- | [no-hooks][] | Disallow setup and teardown hooks | | |
121
- | [no-identical-title][] | Disallow identical titles | ![recommended][] | |
122
- | [no-if][] | Disallow conditional logic | | |
123
- | [no-jasmine-globals][] | Disallow Jasmine globals | ![recommended][] | ![fixable-yellow][] |
124
- | [no-jest-import][] | Disallow importing `jest` | ![recommended][] | |
125
- | [no-large-snapshots][] | Disallow large snapshots | | |
126
- | [no-mocks-import][] | Disallow manually importing from `__mocks__` | | |
127
- | [no-standalone-expect][] | Prevents `expect` statements outside of a `test` or `it` block | | |
128
- | [no-test-callback][] | Using a callback in asynchronous tests | | ![fixable-green][] |
129
- | [no-test-prefixes][] | Disallow using `f` & `x` prefixes to define focused/skipped tests | ![recommended][] | ![fixable-green][] |
130
- | [no-test-return-statement][] | Disallow explicitly returning from tests | | |
131
- | [no-truthy-falsy][] | Disallow using `toBeTruthy()` & `toBeFalsy()` | | |
132
- | [no-try-expect][] | Prevent `catch` assertions in tests | | |
133
- | [prefer-called-with][] | Suggest using `toBeCalledWith()` OR `toHaveBeenCalledWith()` | | |
134
- | [prefer-expect-assertions][] | Suggest using `expect.assertions()` OR `expect.hasAssertions()` | | |
135
- | [prefer-inline-snapshots][] | Suggest using `toMatchInlineSnapshot()` | | ![fixable-green][] |
136
- | [prefer-spy-on][] | Suggest using `jest.spyOn()` | | ![fixable-green][] |
137
- | [prefer-strict-equal][] | Suggest using `toStrictEqual()` | | ![fixable-green][] |
138
- | [prefer-to-be-null][] | Suggest using `toBeNull()` | | ![fixable-green][] |
139
- | [prefer-to-be-undefined][] | Suggest using `toBeUndefined()` | | ![fixable-green][] |
140
- | [prefer-to-contain][] | Suggest using `toContain()` | | ![fixable-green][] |
141
- | [prefer-to-have-length][] | Suggest using `toHaveLength()` | | ![fixable-green][] |
142
- | [prefer-todo][] | Suggest using `test.todo()` | | ![fixable-green][] |
143
- | [require-tothrow-message][] | Require that `toThrow()` and `toThrowError` includes a message | | |
144
- | [valid-describe][] | Enforce valid `describe()` callback | ![recommended][] | |
145
- | [valid-expect-in-promise][] | Enforce having return statement when testing with promises | ![recommended][] | |
146
- | [valid-expect][] | Enforce valid `expect()` usage | ![recommended][] | |
107
+ | Rule | Description | Recommended | Fixable |
108
+ | ------------------------------ | ----------------------------------------------------------------- | ---------------- | ------------------- |
109
+ | [consistent-test-it][] | Enforce consistent test or it keyword | | ![fixable-green][] |
110
+ | [expect-expect][] | Enforce assertion to be made in a test body | | |
111
+ | [lowercase-name][] | Disallow capitalized test names | | ![fixable-green][] |
112
+ | [no-alias-methods][] | Disallow alias methods | ![recommended][] | ![fixable-green][] |
113
+ | [no-commented-out-tests][] | Disallow commented out tests | | |
114
+ | [no-disabled-tests][] | Disallow disabled tests | ![recommended][] | |
115
+ | [no-duplicate-hooks][] | Disallow duplicate hooks within a `describe` block | | |
116
+ | [no-empty-title][] | Disallow empty titles | | |
117
+ | [no-expect-resolves][] | Disallow using `expect().resolves` | | |
118
+ | [no-export][] | Disallow export from test files | | |
119
+ | [no-focused-tests][] | Disallow focused tests | ![recommended][] | |
120
+ | [no-hooks][] | Disallow setup and teardown hooks | | |
121
+ | [no-identical-title][] | Disallow identical titles | ![recommended][] | |
122
+ | [no-if][] | Disallow conditional logic | | |
123
+ | [no-jasmine-globals][] | Disallow Jasmine globals | ![recommended][] | ![fixable-yellow][] |
124
+ | [no-jest-import][] | Disallow importing `jest` | ![recommended][] | |
125
+ | [no-large-snapshots][] | Disallow large snapshots | | |
126
+ | [no-mocks-import][] | Disallow manually importing from `__mocks__` | | |
127
+ | [no-standalone-expect][] | Prevents `expect` statements outside of a `test` or `it` block | | |
128
+ | [no-test-callback][] | Using a callback in asynchronous tests | | ![fixable-green][] |
129
+ | [no-test-prefixes][] | Disallow using `f` & `x` prefixes to define focused/skipped tests | ![recommended][] | ![fixable-green][] |
130
+ | [no-test-return-statement][] | Disallow explicitly returning from tests | | |
131
+ | [no-truthy-falsy][] | Disallow using `toBeTruthy()` & `toBeFalsy()` | | |
132
+ | [no-try-expect][] | Prevent `catch` assertions in tests | | |
133
+ | [prefer-called-with][] | Suggest using `toBeCalledWith()` OR `toHaveBeenCalledWith()` | | |
134
+ | [prefer-expect-assertions][] | Suggest using `expect.assertions()` OR `expect.hasAssertions()` | | |
135
+ | [prefer-inline-snapshots][] | Suggest using `toMatchInlineSnapshot()` | | ![fixable-green][] |
136
+ | [prefer-spy-on][] | Suggest using `jest.spyOn()` | | ![fixable-green][] |
137
+ | [prefer-strict-equal][] | Suggest using `toStrictEqual()` | | ![fixable-green][] |
138
+ | [prefer-to-be-null][] | Suggest using `toBeNull()` | | ![fixable-green][] |
139
+ | [prefer-to-be-undefined][] | Suggest using `toBeUndefined()` | | ![fixable-green][] |
140
+ | [prefer-to-contain][] | Suggest using `toContain()` | | ![fixable-green][] |
141
+ | [prefer-to-have-length][] | Suggest using `toHaveLength()` | | ![fixable-green][] |
142
+ | [prefer-todo][] | Suggest using `test.todo()` | | ![fixable-green][] |
143
+ | [require-top-level-describe][] | Require a top-level `describe` block | | |
144
+ | [require-tothrow-message][] | Require that `toThrow()` and `toThrowError` includes a message | | |
145
+ | [valid-describe][] | Enforce valid `describe()` callback | ![recommended][] | |
146
+ | [valid-expect-in-promise][] | Enforce having return statement when testing with promises | ![recommended][] | |
147
+ | [valid-expect][] | Enforce valid `expect()` usage | ![recommended][] | |
147
148
 
148
149
  ## Credit
149
150
 
@@ -193,6 +194,7 @@ https://github.com/dangreenisrael/eslint-plugin-jest-formatting
193
194
  [prefer-to-contain]: docs/rules/prefer-to-contain.md
194
195
  [prefer-to-have-length]: docs/rules/prefer-to-have-length.md
195
196
  [prefer-todo]: docs/rules/prefer-todo.md
197
+ [require-top-level-describe]: docs/rules/require-top-level-describe.md
196
198
  [require-tothrow-message]: docs/rules/require-tothrow-message.md
197
199
  [valid-describe]: docs/rules/valid-describe.md
198
200
  [valid-expect-in-promise]: docs/rules/valid-expect-in-promise.md
@@ -5,7 +5,8 @@ asserting expections on null value.
5
5
 
6
6
  ## Rule details
7
7
 
8
- This rule triggers a warning if `toBe()` is used to assert a null value.
8
+ This rule triggers a warning if `toBe()`, `isEqual()` or `toStrictEqual()` is
9
+ used to assert a null value.
9
10
 
10
11
  ```js
11
12
  expect(null).toBe(null);
@@ -15,10 +16,14 @@ This rule is enabled by default.
15
16
 
16
17
  ### Default configuration
17
18
 
18
- The following pattern is considered warning:
19
+ The following patterns are considered warnings:
19
20
 
20
21
  ```js
21
22
  expect(null).toBe(null);
23
+
24
+ expect(null).isEqual(null);
25
+
26
+ expect(null).toStrictEqual(null);
22
27
  ```
23
28
 
24
29
  The following pattern is not warning:
@@ -5,7 +5,8 @@ asserting expections on undefined value.
5
5
 
6
6
  ## Rule details
7
7
 
8
- This rule triggers a warning if `toBe()` is used to assert a undefined value.
8
+ This rule triggers a warning if `toBe()`, `isEqual()` or `toStrictEqual()` is
9
+ used to assert an undefined value.
9
10
 
10
11
  ```js
11
12
  expect(undefined).toBe(undefined);
@@ -15,10 +16,14 @@ This rule is enabled by default.
15
16
 
16
17
  ### Default configuration
17
18
 
18
- The following pattern is considered warning:
19
+ The following patterns are considered warnings:
19
20
 
20
21
  ```js
21
22
  expect(undefined).toBe(undefined);
23
+
24
+ expect(undefined).isEqual(undefined);
25
+
26
+ expect(undefined).toStrictEqual(undefined);
22
27
  ```
23
28
 
24
29
  The following pattern is not warning:
@@ -5,8 +5,8 @@ asserting expectations on an array containing an object.
5
5
 
6
6
  ## Rule details
7
7
 
8
- This rule triggers a warning if `toBe()` or `isEqual()` is used to assert object
9
- inclusion in an array
8
+ This rule triggers a warning if `toBe()`, `isEqual()` or `toStrictEqual()` is
9
+ used to assert object inclusion in an array
10
10
 
11
11
  ```js
12
12
  expect(a.includes(b)).toBe(true);
@@ -22,26 +22,24 @@ expect(a.includes(b)).toBe(false);
22
22
 
23
23
  ### Default configuration
24
24
 
25
- The following patterns are considered a warning:
25
+ The following patterns are considered warnings:
26
26
 
27
27
  ```js
28
28
  expect(a.includes(b)).toBe(true);
29
- ```
30
29
 
31
- ```js
32
30
  expect(a.includes(b)).not.toBe(true);
33
- ```
34
31
 
35
- ```js
36
32
  expect(a.includes(b)).toBe(false);
33
+
34
+ expect(a.includes(b)).toEqual(true);
35
+
36
+ expect(a.includes(b)).toStrictEqual(true);
37
37
  ```
38
38
 
39
- The following patterns are not a warning:
39
+ The following patterns are not considered warnings:
40
40
 
41
41
  ```js
42
42
  expect(a).toContain(b);
43
- ```
44
43
 
45
- ```js
46
44
  expect(a).not.toContain(b);
47
45
  ```
@@ -5,8 +5,8 @@ asserting expectations on object's length property.
5
5
 
6
6
  ## Rule details
7
7
 
8
- This rule triggers a warning if `toBe()` is used to assert object's length
9
- property.
8
+ This rule triggers a warning if `toBe()`, `isEqual()` or `toStrictEqual()` is
9
+ used to assert object's length property.
10
10
 
11
11
  ```js
12
12
  expect(files.length).toBe(1);
@@ -16,10 +16,14 @@ This rule is enabled by default.
16
16
 
17
17
  ### Default configuration
18
18
 
19
- The following pattern is considered warning:
19
+ The following patterns are considered warnings:
20
20
 
21
21
  ```js
22
22
  expect(files.length).toBe(1);
23
+
24
+ expect(files.length).toEqual(1);
25
+
26
+ expect(files.length).toStrictEqual(1);
23
27
  ```
24
28
 
25
29
  The following pattern is not warning:
@@ -0,0 +1,52 @@
1
+ # Require top-level describe block (require-top-level-describe)
2
+
3
+ Jest allows you to organise your test files the way you want it. However, the
4
+ more your codebase grows, the more it becomes hard to navigate in your test
5
+ files. This rule makes sure that you provide at least a top-level describe block
6
+ in your test file.
7
+
8
+ ## Rule Details
9
+
10
+ This rule triggers a warning if a test case (`test` and `it`) or a hook
11
+ (`beforeAll`, `beforeEach`, `afterEach`, `afterAll`) is not located in a
12
+ top-level describe block.
13
+
14
+ The following patterns are considered warnings:
15
+
16
+ ```js
17
+ // Above a describe block
18
+ test('my test', () => {});
19
+ describe('test suite', () => {
20
+ it('test', () => {});
21
+ });
22
+
23
+ // Below a describe block
24
+ describe('test suite', () => {});
25
+ test('my test', () => {});
26
+
27
+ // Same for hooks
28
+ beforeAll('my beforeAll', () => {});
29
+ describe('test suite', () => {});
30
+ afterEach('my afterEach', () => {});
31
+ ```
32
+
33
+ The following patterns are **not** considered warnings:
34
+
35
+ ```js
36
+ // In a describe block
37
+ describe('test suite', () => {
38
+ test('my test', () => {});
39
+ });
40
+
41
+ // In a nested describe block
42
+ describe('test suite', () => {
43
+ test('my test', () => {});
44
+ describe('another test suite', () => {
45
+ test('my other test', () => {});
46
+ });
47
+ });
48
+ ```
49
+
50
+ ## When Not To Use It
51
+
52
+ Don't use this rule on non-jest test files.
@@ -4,11 +4,12 @@ var _fs = require("fs");
4
4
 
5
5
  var _path = require("path");
6
6
 
7
- var _ = require("../");
7
+ var _ = _interopRequireDefault(require("../"));
8
8
 
9
- // @ts-ignore
10
- const ruleNames = Object.keys(_.rules);
11
- const numberOfRules = 38;
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+
11
+ const ruleNames = Object.keys(_.default.rules);
12
+ const numberOfRules = 39;
12
13
  describe('rules', () => {
13
14
  it('should have a corresponding doc for each rule', () => {
14
15
  ruleNames.forEach(rule => {
package/lib/index.js CHANGED
@@ -29,14 +29,13 @@ const importDefault = moduleName => // eslint-disable-next-line @typescript-esli
29
29
  interopRequireDefault(require(moduleName)).default;
30
30
 
31
31
  const rulesDir = (0, _path.join)(__dirname, 'rules');
32
- const excludedFiles = ['__tests__', 'util', 'tsUtils'];
32
+ const excludedFiles = ['__tests__', 'utils'];
33
33
  const rules = (0, _fs.readdirSync)(rulesDir).map(rule => (0, _path.parse)(rule).name).filter(rule => !excludedFiles.includes(rule)).reduce((acc, curr) => Object.assign(acc, {
34
34
  [curr]: importDefault((0, _path.join)(rulesDir, curr))
35
35
  }), {});
36
36
  const allRules = Object.keys(rules).reduce((rules, key) => _objectSpread({}, rules, {
37
37
  [`jest/${key}`]: 'error'
38
- }), {}); // eslint-disable-next-line import/no-commonjs
39
-
38
+ }), {});
40
39
  module.exports = {
41
40
  configs: {
42
41
  all: {
@@ -7,9 +7,9 @@ exports.default = void 0;
7
7
 
8
8
  var _experimentalUtils = require("@typescript-eslint/experimental-utils");
9
9
 
10
- var _tsUtils = require("./tsUtils");
10
+ var _utils = require("./utils");
11
11
 
12
- var _default = (0, _tsUtils.createRule)({
12
+ var _default = (0, _utils.createRule)({
13
13
  name: __filename,
14
14
  meta: {
15
15
  docs: {
@@ -48,17 +48,17 @@ var _default = (0, _tsUtils.createRule)({
48
48
  let describeNestingLevel = 0;
49
49
  return {
50
50
  CallExpression(node) {
51
- const nodeName = (0, _tsUtils.getNodeName)(node.callee);
51
+ const nodeName = (0, _utils.getNodeName)(node.callee);
52
52
 
53
53
  if (!nodeName) {
54
54
  return;
55
55
  }
56
56
 
57
- if ((0, _tsUtils.isDescribe)(node)) {
57
+ if ((0, _utils.isDescribe)(node)) {
58
58
  describeNestingLevel++;
59
59
  }
60
60
 
61
- if ((0, _tsUtils.isTestCase)(node) && describeNestingLevel === 0 && nodeName.indexOf(testKeyword) === -1) {
61
+ if ((0, _utils.isTestCase)(node) && describeNestingLevel === 0 && !nodeName.includes(testKeyword)) {
62
62
  const oppositeTestKeyword = getOppositeTestKeyword(testKeyword);
63
63
  context.report({
64
64
  messageId: 'consistentMethod',
@@ -77,7 +77,7 @@ var _default = (0, _tsUtils.createRule)({
77
77
  });
78
78
  }
79
79
 
80
- if ((0, _tsUtils.isTestCase)(node) && describeNestingLevel > 0 && nodeName.indexOf(testKeywordWithinDescribe) === -1) {
80
+ if ((0, _utils.isTestCase)(node) && describeNestingLevel > 0 && !nodeName.includes(testKeywordWithinDescribe)) {
81
81
  const oppositeTestKeyword = getOppositeTestKeyword(testKeywordWithinDescribe);
82
82
  context.report({
83
83
  messageId: 'consistentMethodWithingDescribe',
@@ -98,7 +98,7 @@ var _default = (0, _tsUtils.createRule)({
98
98
  },
99
99
 
100
100
  'CallExpression:exit'(node) {
101
- if ((0, _tsUtils.isDescribe)(node)) {
101
+ if ((0, _utils.isDescribe)(node)) {
102
102
  describeNestingLevel--;
103
103
  }
104
104
  }
@@ -7,13 +7,13 @@ exports.default = void 0;
7
7
 
8
8
  var _experimentalUtils = require("@typescript-eslint/experimental-utils");
9
9
 
10
- var _tsUtils = require("./tsUtils");
10
+ var _utils = require("./utils");
11
11
 
12
12
  /*
13
13
  * This implementation is adapted from eslint-plugin-jasmine.
14
14
  * MIT license, Remco Haszing.
15
15
  */
16
- var _default = (0, _tsUtils.createRule)({
16
+ var _default = (0, _utils.createRule)({
17
17
  name: __filename,
18
18
  meta: {
19
19
  docs: {
@@ -48,7 +48,7 @@ var _default = (0, _tsUtils.createRule)({
48
48
  const unchecked = [];
49
49
  return {
50
50
  CallExpression(node) {
51
- const name = (0, _tsUtils.getNodeName)(node.callee);
51
+ const name = (0, _utils.getNodeName)(node.callee);
52
52
 
53
53
  if (name === 'it' || name === 'test') {
54
54
  unchecked.push(node);
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  var _experimentalUtils = require("@typescript-eslint/experimental-utils");
9
9
 
10
- var _tsUtils = require("./tsUtils");
10
+ var _utils = require("./utils");
11
11
 
12
12
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
13
13
 
@@ -19,7 +19,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
19
19
 
20
20
  const hasStringAsFirstArgument = node => node.arguments && node.arguments[0] && (node.arguments[0].type === _experimentalUtils.AST_NODE_TYPES.Literal || node.arguments[0].type === _experimentalUtils.AST_NODE_TYPES.TemplateLiteral);
21
21
 
22
- const isJestFunctionWithLiteralArg = node => ((0, _tsUtils.isTestCase)(node) || (0, _tsUtils.isDescribe)(node)) && node.callee.type === _experimentalUtils.AST_NODE_TYPES.Identifier && hasStringAsFirstArgument(node);
22
+ const isJestFunctionWithLiteralArg = node => ((0, _utils.isTestCase)(node) || (0, _utils.isDescribe)(node)) && node.callee.type === _experimentalUtils.AST_NODE_TYPES.Identifier && hasStringAsFirstArgument(node);
23
23
 
24
24
  const testDescription = argument => {
25
25
  if (argument.type === _experimentalUtils.AST_NODE_TYPES.Literal) {
@@ -55,7 +55,7 @@ const jestFunctionName = node => {
55
55
  return null;
56
56
  };
57
57
 
58
- var _default = (0, _tsUtils.createRule)({
58
+ var _default = (0, _utils.createRule)({
59
59
  name: __filename,
60
60
  meta: {
61
61
  type: 'suggestion',
@@ -5,42 +5,45 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _util = require("./util");
8
+ var _utils = require("./utils");
9
9
 
10
- var _default = {
10
+ var _default = (0, _utils.createRule)({
11
+ name: __filename,
11
12
  meta: {
12
13
  docs: {
13
- url: (0, _util.getDocsUrl)(__filename)
14
+ category: 'Best Practices',
15
+ description: 'Disallow alias methods',
16
+ recommended: 'warn'
14
17
  },
15
18
  messages: {
16
19
  replaceAlias: `Replace {{ replace }}() with its canonical name of {{ canonical }}()`
17
20
  },
18
21
  fixable: 'code',
22
+ type: 'suggestion',
19
23
  schema: []
20
24
  },
25
+ defaultOptions: [],
21
26
 
22
27
  create(context) {
23
28
  // The Jest methods which have aliases. The canonical name is the first
24
29
  // index of each item.
30
+ // todo: replace w/ Map
25
31
  const methodNames = [['toHaveBeenCalled', 'toBeCalled'], ['toHaveBeenCalledTimes', 'toBeCalledTimes'], ['toHaveBeenCalledWith', 'toBeCalledWith'], ['toHaveBeenLastCalledWith', 'lastCalledWith'], ['toHaveBeenNthCalledWith', 'nthCalledWith'], ['toHaveReturned', 'toReturn'], ['toHaveReturnedTimes', 'toReturnTimes'], ['toHaveReturnedWith', 'toReturnWith'], ['toHaveLastReturnedWith', 'lastReturnedWith'], ['toHaveNthReturnedWith', 'nthReturnedWith'], ['toThrow', 'toThrowError']];
26
32
  return {
27
33
  CallExpression(node) {
28
- if (!(0, _util.expectCaseWithParent)(node)) {
34
+ if (!(0, _utils.isExpectCall)(node)) {
29
35
  return;
30
36
  }
31
37
 
32
- let targetNode = (0, _util.method)(node);
38
+ const _parseExpectCall = (0, _utils.parseExpectCall)(node),
39
+ matcher = _parseExpectCall.matcher;
33
40
 
34
- if (targetNode.name === 'resolves' || targetNode.name === 'rejects' || targetNode.name === 'not') {
35
- targetNode = (0, _util.method)(node.parent);
36
- }
37
-
38
- if (!targetNode) {
41
+ if (!matcher) {
39
42
  return;
40
43
  } // Check if the method used matches any of ours
41
44
 
42
45
 
43
- const methodItem = methodNames.find(item => item[1] === targetNode.name);
46
+ const methodItem = methodNames.find(item => item[1] === matcher.name);
44
47
 
45
48
  if (methodItem) {
46
49
  context.report({
@@ -49,8 +52,8 @@ var _default = {
49
52
  replace: methodItem[1],
50
53
  canonical: methodItem[0]
51
54
  },
52
- node: targetNode,
53
- fix: fixer => [fixer.replaceText(targetNode, methodItem[0])]
55
+ node: matcher.node.property,
56
+ fix: fixer => [fixer.replaceText(matcher.node.property, methodItem[0])]
54
57
  });
55
58
  }
56
59
  }
@@ -58,5 +61,6 @@ var _default = {
58
61
  };
59
62
  }
60
63
 
61
- };
64
+ });
65
+
62
66
  exports.default = _default;
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _tsUtils = require("./tsUtils");
8
+ var _utils = require("./utils");
9
9
 
10
10
  function hasTests(node) {
11
11
  return /^\s*(x|f)?(test|it|describe)(\.\w+|\[['"]\w+['"]\])?\s*\(/m.test(node.value);
12
12
  }
13
13
 
14
- var _default = (0, _tsUtils.createRule)({
14
+ var _default = (0, _utils.createRule)({
15
15
  name: __filename,
16
16
  meta: {
17
17
  docs: {
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _tsUtils = require("./tsUtils");
8
+ var _utils = require("./utils");
9
9
 
10
- var _default = (0, _tsUtils.createRule)({
10
+ var _default = (0, _utils.createRule)({
11
11
  name: __filename,
12
12
  meta: {
13
13
  docs: {
@@ -50,7 +50,7 @@ var _default = (0, _tsUtils.createRule)({
50
50
  },
51
51
 
52
52
  CallExpression(node) {
53
- const functionName = (0, _tsUtils.getNodeName)(node.callee);
53
+ const functionName = (0, _utils.getNodeName)(node.callee);
54
54
 
55
55
  switch (functionName) {
56
56
  case 'describe.skip':
@@ -71,7 +71,7 @@ var _default = (0, _tsUtils.createRule)({
71
71
  },
72
72
 
73
73
  'CallExpression[callee.name="pending"]'(node) {
74
- if ((0, _tsUtils.scopeHasLocalReference)(context.getScope(), 'pending')) {
74
+ if ((0, _utils.scopeHasLocalReference)(context.getScope(), 'pending')) {
75
75
  return;
76
76
  }
77
77
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _tsUtils = require("./tsUtils");
8
+ var _utils = require("./utils");
9
9
 
10
10
  const newHookContext = () => ({
11
11
  beforeAll: 0,
@@ -14,7 +14,7 @@ const newHookContext = () => ({
14
14
  afterEach: 0
15
15
  });
16
16
 
17
- var _default = (0, _tsUtils.createRule)({
17
+ var _default = (0, _utils.createRule)({
18
18
  name: __filename,
19
19
  meta: {
20
20
  docs: {
@@ -34,11 +34,11 @@ var _default = (0, _tsUtils.createRule)({
34
34
  const hookContexts = [newHookContext()];
35
35
  return {
36
36
  CallExpression(node) {
37
- if ((0, _tsUtils.isDescribe)(node)) {
37
+ if ((0, _utils.isDescribe)(node)) {
38
38
  hookContexts.push(newHookContext());
39
39
  }
40
40
 
41
- if ((0, _tsUtils.isHook)(node)) {
41
+ if ((0, _utils.isHook)(node)) {
42
42
  const currentLayer = hookContexts[hookContexts.length - 1];
43
43
  currentLayer[node.callee.name] += 1;
44
44
 
@@ -55,7 +55,7 @@ var _default = (0, _tsUtils.createRule)({
55
55
  },
56
56
 
57
57
  'CallExpression:exit'(node) {
58
- if ((0, _tsUtils.isDescribe)(node)) {
58
+ if ((0, _utils.isDescribe)(node)) {
59
59
  hookContexts.pop();
60
60
  }
61
61
  }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _tsUtils = require("./tsUtils");
8
+ var _utils = require("./utils");
9
9
 
10
10
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
11
11
 
@@ -15,7 +15,7 @@ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d =
15
15
 
16
16
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
17
 
18
- var _default = (0, _tsUtils.createRule)({
18
+ var _default = (0, _utils.createRule)({
19
19
  name: __filename,
20
20
  meta: {
21
21
  docs: {
@@ -35,27 +35,21 @@ var _default = (0, _tsUtils.createRule)({
35
35
  create(context) {
36
36
  return {
37
37
  CallExpression(node) {
38
- if (!(0, _tsUtils.isDescribe)(node) && !(0, _tsUtils.isTestCase)(node)) {
38
+ if (!(0, _utils.isDescribe)(node) && !(0, _utils.isTestCase)(node)) {
39
39
  return;
40
40
  }
41
41
 
42
42
  const _node$arguments = _slicedToArray(node.arguments, 1),
43
43
  firstArgument = _node$arguments[0];
44
44
 
45
- if (!(0, _tsUtils.isStringNode)(firstArgument)) {
45
+ if (!firstArgument || !(0, _utils.isStringNode)(firstArgument, '')) {
46
46
  return;
47
47
  }
48
48
 
49
- if ((0, _tsUtils.isTemplateLiteral)(firstArgument) && (0, _tsUtils.hasExpressions)(firstArgument)) {
50
- return;
51
- }
52
-
53
- if ((0, _tsUtils.getStringValue)(firstArgument) === '') {
54
- context.report({
55
- messageId: (0, _tsUtils.isDescribe)(node) ? 'describe' : 'test',
56
- node
57
- });
58
- }
49
+ context.report({
50
+ messageId: (0, _utils.isDescribe)(node) ? 'describe' : 'test',
51
+ node
52
+ });
59
53
  }
60
54
 
61
55
  };