cypress-fail-on-console-error 3.3.1 → 4.0.1

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/README.md CHANGED
@@ -22,62 +22,41 @@ failOnConsoleError();
22
22
 
23
23
  | Parameter | Default | <div style="width:300px">Description</div> |
24
24
  |--- |--- |--- |
25
- | `excludeMessages` | `[]` | Exclude console messages from throwing `AssertionError`. Regular expression parameters are acceptable. String parameters will be interpreted as regular expression. [String.match()](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/match) will be used for evaluation. Be sure to [escape the string regular expression](https://javascript.info/regexp-escaping) for special characters. When console message property `stacktrace` exists, then the whole stacktrace can be matched. |
26
- | `includeConsoleTypes` | `[consoleType.ERROR]` | Define console types for observation
27
- | `cypressLog` | `false` | Enable debug logs for errorMessage_excludeMessage_match and errorMessage_excluded to cypress runner
25
+ | `consoleMessages` | `[]` | Exclude console messages from throwing `AssertionError`. Types `RegExp` and `string` are accepted. Strings will be converted to regular expression. [RegExp.test()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test?retiredLocale=de) will be used for console message matching. Make sure to [escape special characters](https://javascript.info/regexp-escaping). When console message property `stacktrace` exists, then the whole stacktrace can be matched. |
26
+ | `consoleTypes` | `['error']` | Define console types for observation. `error`, `warn` and `info` are accepted values.
27
+ | `debug` | `false` | Enable debug logs for `consoleMessage_configConsoleMessage_match` and `consoleMessage_excluded` to cypress runner
28
28
 
29
29
  <br/>
30
30
 
31
31
  ```js
32
- import failOnConsoleError, { consoleType, Config } from 'cypress-fail-on-console-error';
32
+ import failOnConsoleError, { Config } from 'cypress-fail-on-console-error';
33
33
 
34
34
  const config: Config = {
35
- excludeMessages: ['foo', /^some bar-regex.*/],
36
- includeConsoleTypes: [
37
- consoleType.ERROR,
38
- consoleType.WARN,
39
- consoleType.INFO,
40
- ],
41
- cypressLog: true,
35
+ consoleMessages: ['foo', /^some bar-regex.*/],
36
+ consoleTypes: ['error', 'warn', 'info'],
37
+ debug: false,
42
38
  };
43
39
 
44
40
  failOnConsoleError(config);
45
-
46
- // excludeMessages[0] matches example console message 'this is a foo message'
47
- // excludeMessages[1] matches example console message 'some bar-regex message'
48
- // includeConsoleTypes observe console types ERROR, WARN and INFO
49
- // cypressLog debug information will be printed to the cypress runner
50
- ```
51
-
52
- Using Javascript, consoleType Enum can be parsed as number values
53
-
54
- ```js
55
- failOnConsoleError({
56
- includeConsoleTypes: [0, 1, 2],
57
- });
58
-
59
- // 0 = INFO
60
- // 1 = WARN
61
- // 2 = ERROR
62
41
  ```
63
42
 
64
43
  ### Set config from cypress test
65
- Use `failOnConsoleError` functions `getConfig()` and `setConfig()` with your own requirements. Detailed example implementation [cypress comands](https://github.com/nils-hoyer/cypress-fail-on-console-error/blob/56753cf3ff9222bb2c452304589ae0cfd5f85b46/cypress/support/e2e.ts#L14-L64) & [cypress test](https://github.com/nils-hoyer/cypress-fail-on-console-error/blob/123e251510045f2eb30c9ec2f6f247b77427d464/cypress/e2e/shouldFailOnConsoleErrorFromSetConfig.cy.ts#L1-L25). Note that the config will be resetted to initial config between tests.
44
+ Use `failOnConsoleError` functions `getConfig()` and `setConfig()` with your own requirements. Detailed example implementation [cypress comands](https://github.com/nils-hoyer/cypress-fail-on-console-error/blob/main/cypress/support/e2e.ts#L14-L64) & [cypress test](https://github.com/nils-hoyer/cypress-fail-on-console-error/blob/main/cypress/e2e/shouldFailOnConsoleErrorFromSetConfig.cy.ts#L1-L25). Note that the config will be resetted to initial config between tests.
66
45
 
67
46
  ```js
47
+ // Simple example implementation
68
48
  const { getConfig, setConfig } = failOnConsoleError(config);
69
49
 
70
50
  Cypress.Commands.addAll({
71
- getExcludeMessages: () => cy.wrap(getConfig().excludeMessages),
72
- setExcludeMessages: (excludeMessages: (string | RegExp)[]) =>
73
- setConfig({ ...getConfig(), excludeMessages})
74
- });
51
+ getConsoleMessages: () => cy.wrap(getConfig().consoleMessages),
52
+ setConsoleMessages: (consoleMessages: (string | RegExp)[]) =>
53
+ setConfig({ ...getConfig(), consoleMessages });
75
54
  ```
76
55
 
77
56
  ```js
78
57
  describe('example test', () => {
79
- it('should set exclude messages', () => {
80
- cy.setExcludeMessages(['foo', 'bar']);
58
+ it('should set console messages', () => {
59
+ cy.setConsoleMessages(['foo', 'bar']);
81
60
  cy.visit('...');
82
61
  });
83
62
  });
@@ -85,9 +64,10 @@ describe('example test', () => {
85
64
 
86
65
 
87
66
  ### Debugging
88
- When Cypress log is activated, debug information about the matching and exclude process are available from the cypress runner. As a plus, the generated error message string can be verified.
89
- ![image info](./docs/cypressLogTrue.png)
67
+ When Cypress log is activated, debug information about the console messages / config console messages matching and excluding process are available from the cypress runner. As a plus, the generated error message string can be verified.
68
+ ![debugTrue.png](./docs/debugTrue.png)
90
69
 
91
70
  ### Contributing
92
71
  1. Create an project issue with proper description and expected behaviour
93
- 2. Provide a PR with implementation and tests. Command `npm run verify` have to pass locally
72
+ 2. NPM command `npm run verify` have to pass locally
73
+ 3. Provide a PR with implementation and tests
package/dist/index.d.ts CHANGED
@@ -9,10 +9,10 @@ export declare const validateConfig: (config: Config) => void;
9
9
  export declare const createConfig: (config: Config) => Required<Config>;
10
10
  export declare const createSpies: (config: Required<Config>, console: Console) => Map<ConsoleType, sinon.SinonSpy>;
11
11
  export declare const resetSpies: (spies: Map<ConsoleType, sinon.SinonSpy>) => Map<ConsoleType, sinon.SinonSpy>;
12
- export declare const getIncludedCall: (spies: Map<ConsoleType, sinon.SinonSpy>, config: Required<Config>) => string | undefined;
13
- export declare const findIncludedCall: (spy: sinon.SinonSpy, config: Required<Config>) => string | undefined;
14
- export declare const isErrorMessageExcluded: (errorMessage: string, excludeMessage: string, cypressLog: boolean) => boolean;
12
+ export declare const getConsoleMessageIncluded: (spies: Map<ConsoleType, sinon.SinonSpy>, config: Required<Config>) => string | undefined;
13
+ export declare const findConsoleMessageIncluded: (spy: sinon.SinonSpy, config: Required<Config>) => string | undefined;
14
+ export declare const isConsoleMessageExcluded: (consoleMessage: string, configConsoleMessage: string | RegExp, debug: boolean) => boolean;
15
15
  export declare const callToString: (calls: any[]) => string;
16
16
  export declare const cypressLogger: (name: string, message: any) => void;
17
17
  export { Config } from './types/Config';
18
- export { ConsoleType as consoleType } from './types/ConsoleType';
18
+ export { ConsoleType } from './types/ConsoleType';
package/dist/index.js CHANGED
@@ -37,14 +37,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.consoleType = exports.cypressLogger = exports.callToString = exports.isErrorMessageExcluded = exports.findIncludedCall = exports.getIncludedCall = exports.resetSpies = exports.createSpies = exports.createConfig = exports.validateConfig = void 0;
40
+ exports.cypressLogger = exports.callToString = exports.isConsoleMessageExcluded = exports.findConsoleMessageIncluded = exports.getConsoleMessageIncluded = exports.resetSpies = exports.createSpies = exports.createConfig = exports.validateConfig = void 0;
41
41
  var chai = __importStar(require("chai"));
42
42
  var chai_1 = require("chai");
43
43
  var os_1 = require("os");
44
44
  var sinon = __importStar(require("sinon"));
45
45
  var sinon_chai_1 = __importDefault(require("sinon-chai"));
46
46
  var type_detect_1 = __importDefault(require("type-detect"));
47
- var ConsoleType_1 = require("./types/ConsoleType");
48
47
  chai.should();
49
48
  chai.use(sinon_chai_1.default);
50
49
  function failOnConsoleError(_config) {
@@ -65,13 +64,16 @@ function failOnConsoleError(_config) {
65
64
  Cypress.on('command:end', function () {
66
65
  if (!spies)
67
66
  return;
68
- var errorMessage = (0, exports.getIncludedCall)(spies, config);
67
+ var consoleMessage = (0, exports.getConsoleMessageIncluded)(spies, config);
69
68
  spies = (0, exports.resetSpies)(spies);
70
- if (errorMessage) {
71
- throw new chai_1.AssertionError("cypress-fail-on-console-error: ".concat(os_1.EOL, " ").concat(errorMessage));
72
- }
69
+ if (!consoleMessage)
70
+ return;
71
+ throw new chai_1.AssertionError("cypress-fail-on-console-error: ".concat(os_1.EOL, " ").concat(consoleMessage));
73
72
  });
74
73
  Cypress.on('test:after:run', function () {
74
+ if (spies) {
75
+ spies = (0, exports.resetSpies)(spies);
76
+ }
75
77
  setConfig(originConfig);
76
78
  });
77
79
  return {
@@ -81,19 +83,19 @@ function failOnConsoleError(_config) {
81
83
  }
82
84
  exports.default = failOnConsoleError;
83
85
  var validateConfig = function (config) {
84
- if (config.excludeMessages) {
85
- config.excludeMessages.forEach(function (_excludeMessage) {
86
- chai.expect((0, type_detect_1.default)(_excludeMessage)).to.be.oneOf([
86
+ if (config.consoleMessages) {
87
+ config.consoleMessages.forEach(function (consoleMessage) {
88
+ chai.expect((0, type_detect_1.default)(consoleMessage)).to.be.oneOf([
87
89
  'string',
88
90
  'RegExp',
89
91
  ]);
90
- chai.expect(_excludeMessage.toString()).to.have.length.above(0);
92
+ chai.expect(consoleMessage.toString()).to.have.length.above(0);
91
93
  });
92
94
  }
93
- if (config.includeConsoleTypes) {
94
- chai.expect(config.includeConsoleTypes).not.to.be.empty;
95
- config.includeConsoleTypes.forEach(function (_includeConsoleType) {
96
- chai.expect((0, ConsoleType_1.someConsoleType)(_includeConsoleType), "includeConsoleTypes '".concat(_includeConsoleType, "' is an unknown ConsoleType")).to.be.true;
95
+ if (config.consoleTypes) {
96
+ chai.expect(config.consoleTypes).not.to.be.empty;
97
+ config.consoleTypes.forEach(function (consoleType) {
98
+ chai.expect(['error', 'warn', 'info']).contains(consoleType);
97
99
  });
98
100
  }
99
101
  };
@@ -101,74 +103,71 @@ exports.validateConfig = validateConfig;
101
103
  var createConfig = function (config) {
102
104
  var _a, _b, _c;
103
105
  return ({
104
- excludeMessages: (_a = config.excludeMessages) !== null && _a !== void 0 ? _a : [],
105
- includeConsoleTypes: ((_b = config.includeConsoleTypes) === null || _b === void 0 ? void 0 : _b.length)
106
- ? config.includeConsoleTypes
107
- : [ConsoleType_1.ConsoleType.ERROR],
108
- cypressLog: (_c = config.cypressLog) !== null && _c !== void 0 ? _c : false,
106
+ consoleMessages: (_a = config.consoleMessages) !== null && _a !== void 0 ? _a : [],
107
+ consoleTypes: ((_b = config.consoleTypes) === null || _b === void 0 ? void 0 : _b.length) ? config.consoleTypes : ['error'],
108
+ debug: (_c = config.debug) !== null && _c !== void 0 ? _c : false,
109
109
  });
110
110
  };
111
111
  exports.createConfig = createConfig;
112
112
  var createSpies = function (config, console) {
113
113
  var _a;
114
114
  var spies = new Map();
115
- (_a = config.includeConsoleTypes) === null || _a === void 0 ? void 0 : _a.forEach(function (_consoleType) {
116
- var functionName = ConsoleType_1.ConsoleType[_consoleType].toLowerCase();
117
- spies.set(_consoleType, sinon.spy(console, functionName));
115
+ (_a = config.consoleTypes) === null || _a === void 0 ? void 0 : _a.forEach(function (consoleType) {
116
+ spies.set(consoleType, sinon.spy(console, consoleType));
118
117
  });
119
118
  return spies;
120
119
  };
121
120
  exports.createSpies = createSpies;
122
121
  var resetSpies = function (spies) {
123
- spies.forEach(function (_spy) { return _spy.resetHistory(); });
122
+ spies.forEach(function (spy) { return spy.resetHistory(); });
124
123
  return spies;
125
124
  };
126
125
  exports.resetSpies = resetSpies;
127
- var getIncludedCall = function (spies, config) {
128
- var errorMessage;
129
- Array.from(spies.values()).forEach(function (spy) {
126
+ var getConsoleMessageIncluded = function (spies, config) {
127
+ var includedConsoleMessage;
128
+ Array.from(spies.values()).find(function (spy) {
130
129
  if (!spy.called)
131
- return;
132
- var includedCall = (0, exports.findIncludedCall)(spy, config);
133
- if (includedCall !== undefined) {
134
- errorMessage = includedCall;
135
- }
130
+ return false;
131
+ includedConsoleMessage = (0, exports.findConsoleMessageIncluded)(spy, config);
132
+ return includedConsoleMessage !== undefined;
136
133
  });
137
- return errorMessage;
134
+ return includedConsoleMessage;
138
135
  };
139
- exports.getIncludedCall = getIncludedCall;
140
- var findIncludedCall = function (spy, config) {
141
- var errorMessages = spy.args.map(function (call) { return (0, exports.callToString)(call); });
142
- if (config.excludeMessages === undefined) {
143
- return errorMessages[0];
136
+ exports.getConsoleMessageIncluded = getConsoleMessageIncluded;
137
+ var findConsoleMessageIncluded = function (spy, config) {
138
+ var consoleMessages = spy.args.map(function (call) { return (0, exports.callToString)(call); });
139
+ if (config.consoleMessages.length === 0) {
140
+ return consoleMessages[0];
144
141
  }
145
- return errorMessages.find(function (_errorMessage) {
146
- var _isErrorMessageExcluded = config.excludeMessages.some(function (_excludeMessage) {
147
- return (0, exports.isErrorMessageExcluded)(_errorMessage, _excludeMessage, config.cypressLog);
142
+ return consoleMessages.find(function (consoleMessage) {
143
+ var someConsoleMessagesExcluded = config.consoleMessages.some(function (configConsoleMessage) {
144
+ return (0, exports.isConsoleMessageExcluded)(consoleMessage, configConsoleMessage, config.debug);
148
145
  });
149
- if (config.cypressLog === true) {
150
- (0, exports.cypressLogger)('errorMessage_excluded', {
151
- _errorMessage: _errorMessage,
152
- _isErrorMessageExcluded: _isErrorMessageExcluded,
146
+ if (config.debug) {
147
+ (0, exports.cypressLogger)('consoleMessage_excluded', {
148
+ consoleMessage: consoleMessage,
149
+ someConsoleMessagesExcluded: someConsoleMessagesExcluded,
153
150
  });
154
151
  }
155
- return !_isErrorMessageExcluded;
152
+ return !someConsoleMessagesExcluded;
156
153
  });
157
154
  };
158
- exports.findIncludedCall = findIncludedCall;
159
- var isErrorMessageExcluded = function (errorMessage, excludeMessage, cypressLog) {
160
- var _a;
161
- var match = (((_a = errorMessage.match(excludeMessage)) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
162
- if (cypressLog) {
163
- (0, exports.cypressLogger)('errorMessage_excludeMessage_match', {
164
- errorMessage: errorMessage,
165
- excludeMessage: excludeMessage,
166
- match: match,
155
+ exports.findConsoleMessageIncluded = findConsoleMessageIncluded;
156
+ var isConsoleMessageExcluded = function (consoleMessage, configConsoleMessage, debug) {
157
+ var configConsoleMessageRegExp = configConsoleMessage instanceof RegExp
158
+ ? configConsoleMessage
159
+ : new RegExp(configConsoleMessage);
160
+ var consoleMessageExcluded = configConsoleMessageRegExp.test(consoleMessage);
161
+ if (debug) {
162
+ (0, exports.cypressLogger)('consoleMessage_configConsoleMessage_match', {
163
+ consoleMessage: consoleMessage,
164
+ configConsoleMessage: configConsoleMessage,
165
+ consoleMessageExcluded: consoleMessageExcluded,
167
166
  });
168
167
  }
169
- return match;
168
+ return consoleMessageExcluded;
170
169
  };
171
- exports.isErrorMessageExcluded = isErrorMessageExcluded;
170
+ exports.isConsoleMessageExcluded = isConsoleMessageExcluded;
172
171
  var callToString = function (calls) {
173
172
  return calls
174
173
  .reduce(function (previousValue, currentValue) {
@@ -189,5 +188,3 @@ var cypressLogger = function (name, message) {
189
188
  });
190
189
  };
191
190
  exports.cypressLogger = cypressLogger;
192
- var ConsoleType_2 = require("./types/ConsoleType");
193
- Object.defineProperty(exports, "consoleType", { enumerable: true, get: function () { return ConsoleType_2.ConsoleType; } });
@@ -1,6 +1,6 @@
1
1
  import { ConsoleType } from "./ConsoleType";
2
2
  export interface Config {
3
- excludeMessages?: (string | RegExp)[];
4
- includeConsoleTypes?: ConsoleType[];
5
- cypressLog?: boolean;
3
+ consoleMessages?: (string | RegExp)[];
4
+ consoleTypes?: (ConsoleType)[];
5
+ debug?: boolean;
6
6
  }
@@ -1,6 +1 @@
1
- export declare enum ConsoleType {
2
- INFO = 0,
3
- WARN = 1,
4
- ERROR = 2
5
- }
6
- export declare const someConsoleType: (consoleType: ConsoleType) => boolean;
1
+ export declare type ConsoleType = 'error' | 'warn' | 'info';
@@ -1,15 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.someConsoleType = exports.ConsoleType = void 0;
4
- var ConsoleType;
5
- (function (ConsoleType) {
6
- ConsoleType[ConsoleType["INFO"] = 0] = "INFO";
7
- ConsoleType[ConsoleType["WARN"] = 1] = "WARN";
8
- ConsoleType[ConsoleType["ERROR"] = 2] = "ERROR";
9
- })(ConsoleType = exports.ConsoleType || (exports.ConsoleType = {}));
10
- var someConsoleType = function (consoleType) {
11
- return consoleType === ConsoleType.INFO ||
12
- consoleType === ConsoleType.WARN ||
13
- consoleType === ConsoleType.ERROR;
14
- };
15
- exports.someConsoleType = someConsoleType;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cypress-fail-on-console-error",
3
- "version": "3.3.1",
3
+ "version": "4.0.1",
4
4
  "description": "fail cypress test on console error",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -40,16 +40,16 @@
40
40
  "devDependencies": {
41
41
  "@types/chai": "4.3.3",
42
42
  "@types/expect": "24.3.0",
43
- "@types/mocha": "9.1.1",
43
+ "@types/mocha": "10.0.0",
44
44
  "@types/sinon": "10.0.13",
45
45
  "@types/sinon-chai": "3.2.8",
46
46
  "@types/type-detect": "4.0.1",
47
- "cypress": "10.8.0",
47
+ "cypress": "10.10.0",
48
48
  "mocha": "10.0.0",
49
49
  "prettier": "2.7.1",
50
50
  "prettier-plugin-organize-imports": "3.1.1",
51
51
  "rimraf": "3.0.2",
52
52
  "ts-mocha": "10.0.0",
53
- "typescript": "4.8.3"
53
+ "typescript": "4.8.4"
54
54
  }
55
55
  }