cypress-fail-on-console-error 3.3.0 → 4.0.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.
package/README.md CHANGED
@@ -22,72 +22,52 @@ 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()),
72
- setExcludeMessages: (excludeMessages: (string | RegExp)[]) =>
73
- setConfig({ ...getConfig(), excludeMessages );
51
+ getConsoleMessages: () => cy.wrap(getConfig().consoleMessages),
52
+ setConsoleMessages: (consoleMessages: (string | RegExp)[]) =>
53
+ setConfig({ ...getConfig(), consoleMessages });
74
54
  ```
75
55
 
76
56
  ```js
77
57
  describe('example test', () => {
78
- it('should set excluded messages', () => {
79
- cy.setExcludeMessages(['foo', 'bar']).then(() => {
80
- cy.visit('./cypress/fixtures/consoleError.html');
81
- });
58
+ it('should set console messages', () => {
59
+ cy.setConsoleMessages(['foo', 'bar']);
60
+ cy.visit('...');
82
61
  });
83
62
  });
84
63
  ```
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,11 +64,11 @@ 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 () {
75
74
  setConfig(originConfig);
@@ -81,19 +80,19 @@ function failOnConsoleError(_config) {
81
80
  }
82
81
  exports.default = failOnConsoleError;
83
82
  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([
83
+ if (config.consoleMessages) {
84
+ config.consoleMessages.forEach(function (consoleMessage) {
85
+ chai.expect((0, type_detect_1.default)(consoleMessage)).to.be.oneOf([
87
86
  'string',
88
87
  'RegExp',
89
88
  ]);
90
- chai.expect(_excludeMessage.toString()).to.have.length.above(0);
89
+ chai.expect(consoleMessage.toString()).to.have.length.above(0);
91
90
  });
92
91
  }
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;
92
+ if (config.consoleTypes) {
93
+ chai.expect(config.consoleTypes).not.to.be.empty;
94
+ config.consoleTypes.forEach(function (consoleType) {
95
+ chai.expect(['error', 'warn', 'info']).contains(consoleType);
97
96
  });
98
97
  }
99
98
  };
@@ -101,74 +100,71 @@ exports.validateConfig = validateConfig;
101
100
  var createConfig = function (config) {
102
101
  var _a, _b, _c;
103
102
  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,
103
+ consoleMessages: (_a = config.consoleMessages) !== null && _a !== void 0 ? _a : [],
104
+ consoleTypes: ((_b = config.consoleTypes) === null || _b === void 0 ? void 0 : _b.length) ? config.consoleTypes : ['error'],
105
+ debug: (_c = config.debug) !== null && _c !== void 0 ? _c : false,
109
106
  });
110
107
  };
111
108
  exports.createConfig = createConfig;
112
109
  var createSpies = function (config, console) {
113
110
  var _a;
114
111
  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));
112
+ (_a = config.consoleTypes) === null || _a === void 0 ? void 0 : _a.forEach(function (consoleType) {
113
+ spies.set(consoleType, sinon.spy(console, consoleType));
118
114
  });
119
115
  return spies;
120
116
  };
121
117
  exports.createSpies = createSpies;
122
118
  var resetSpies = function (spies) {
123
- spies.forEach(function (_spy) { return _spy.resetHistory(); });
119
+ spies.forEach(function (spy) { return spy.resetHistory(); });
124
120
  return spies;
125
121
  };
126
122
  exports.resetSpies = resetSpies;
127
- var getIncludedCall = function (spies, config) {
128
- var errorMessage;
129
- Array.from(spies.values()).forEach(function (spy) {
123
+ var getConsoleMessageIncluded = function (spies, config) {
124
+ var includedConsoleMessage;
125
+ Array.from(spies.values()).find(function (spy) {
130
126
  if (!spy.called)
131
- return;
132
- var includedCall = (0, exports.findIncludedCall)(spy, config);
133
- if (includedCall !== undefined) {
134
- errorMessage = includedCall;
135
- }
127
+ return false;
128
+ includedConsoleMessage = (0, exports.findConsoleMessageIncluded)(spy, config);
129
+ return includedConsoleMessage !== undefined;
136
130
  });
137
- return errorMessage;
131
+ return includedConsoleMessage;
138
132
  };
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];
133
+ exports.getConsoleMessageIncluded = getConsoleMessageIncluded;
134
+ var findConsoleMessageIncluded = function (spy, config) {
135
+ var consoleMessages = spy.args.map(function (call) { return (0, exports.callToString)(call); });
136
+ if (config.consoleMessages.length === 0) {
137
+ return consoleMessages[0];
144
138
  }
145
- return errorMessages.find(function (_errorMessage) {
146
- var _isErrorMessageExcluded = config.excludeMessages.some(function (_excludeMessage) {
147
- return (0, exports.isErrorMessageExcluded)(_errorMessage, _excludeMessage, config.cypressLog);
139
+ return consoleMessages.find(function (consoleMessage) {
140
+ var someConsoleMessagesExcluded = config.consoleMessages.some(function (configConsoleMessage) {
141
+ return (0, exports.isConsoleMessageExcluded)(consoleMessage, configConsoleMessage, config.debug);
148
142
  });
149
- if (config.cypressLog === true) {
150
- (0, exports.cypressLogger)('errorMessage_excluded', {
151
- _errorMessage: _errorMessage,
152
- _isErrorMessageExcluded: _isErrorMessageExcluded,
143
+ if (config.debug) {
144
+ (0, exports.cypressLogger)('consoleMessage_excluded', {
145
+ consoleMessage: consoleMessage,
146
+ someConsoleMessagesExcluded: someConsoleMessagesExcluded,
153
147
  });
154
148
  }
155
- return !_isErrorMessageExcluded;
149
+ return !someConsoleMessagesExcluded;
156
150
  });
157
151
  };
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,
152
+ exports.findConsoleMessageIncluded = findConsoleMessageIncluded;
153
+ var isConsoleMessageExcluded = function (consoleMessage, configConsoleMessage, debug) {
154
+ var configConsoleMessageRegExp = configConsoleMessage instanceof RegExp
155
+ ? configConsoleMessage
156
+ : new RegExp(configConsoleMessage);
157
+ var consoleMessageExcluded = configConsoleMessageRegExp.test(consoleMessage);
158
+ if (debug) {
159
+ (0, exports.cypressLogger)('consoleMessage_configConsoleMessage_match', {
160
+ consoleMessage: consoleMessage,
161
+ configConsoleMessage: configConsoleMessage,
162
+ consoleMessageExcluded: consoleMessageExcluded,
167
163
  });
168
164
  }
169
- return match;
165
+ return consoleMessageExcluded;
170
166
  };
171
- exports.isErrorMessageExcluded = isErrorMessageExcluded;
167
+ exports.isConsoleMessageExcluded = isConsoleMessageExcluded;
172
168
  var callToString = function (calls) {
173
169
  return calls
174
170
  .reduce(function (previousValue, currentValue) {
@@ -189,5 +185,3 @@ var cypressLogger = function (name, message) {
189
185
  });
190
186
  };
191
187
  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.0",
3
+ "version": "4.0.0",
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.9.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
  }