cypress-fail-on-console-error 3.3.1 → 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 +18 -38
- package/dist/index.d.ts +4 -4
- package/dist/index.js +52 -58
- package/dist/types/Config.d.ts +3 -3
- package/dist/types/ConsoleType.d.ts +1 -6
- package/dist/types/ConsoleType.js +0 -13
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -22,62 +22,41 @@ failOnConsoleError();
|
|
|
22
22
|
|
|
23
23
|
| Parameter | Default | <div style="width:300px">Description</div> |
|
|
24
24
|
|--- |--- |--- |
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
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, {
|
|
32
|
+
import failOnConsoleError, { Config } from 'cypress-fail-on-console-error';
|
|
33
33
|
|
|
34
34
|
const config: Config = {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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/
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
setConfig({ ...getConfig(),
|
|
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
|
|
80
|
-
cy.
|
|
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
|
|
89
|
-

|
|
90
69
|
|
|
91
70
|
### Contributing
|
|
92
71
|
1. Create an project issue with proper description and expected behaviour
|
|
93
|
-
2.
|
|
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
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const
|
|
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
|
|
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.
|
|
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
|
|
67
|
+
var consoleMessage = (0, exports.getConsoleMessageIncluded)(spies, config);
|
|
69
68
|
spies = (0, exports.resetSpies)(spies);
|
|
70
|
-
if (
|
|
71
|
-
|
|
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.
|
|
85
|
-
config.
|
|
86
|
-
chai.expect((0, type_detect_1.default)(
|
|
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(
|
|
89
|
+
chai.expect(consoleMessage.toString()).to.have.length.above(0);
|
|
91
90
|
});
|
|
92
91
|
}
|
|
93
|
-
if (config.
|
|
94
|
-
chai.expect(config.
|
|
95
|
-
config.
|
|
96
|
-
chai.expect(
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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.
|
|
116
|
-
|
|
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 (
|
|
119
|
+
spies.forEach(function (spy) { return spy.resetHistory(); });
|
|
124
120
|
return spies;
|
|
125
121
|
};
|
|
126
122
|
exports.resetSpies = resetSpies;
|
|
127
|
-
var
|
|
128
|
-
var
|
|
129
|
-
Array.from(spies.values()).
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
errorMessage = includedCall;
|
|
135
|
-
}
|
|
127
|
+
return false;
|
|
128
|
+
includedConsoleMessage = (0, exports.findConsoleMessageIncluded)(spy, config);
|
|
129
|
+
return includedConsoleMessage !== undefined;
|
|
136
130
|
});
|
|
137
|
-
return
|
|
131
|
+
return includedConsoleMessage;
|
|
138
132
|
};
|
|
139
|
-
exports.
|
|
140
|
-
var
|
|
141
|
-
var
|
|
142
|
-
if (config.
|
|
143
|
-
return
|
|
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
|
|
146
|
-
var
|
|
147
|
-
return (0, exports.
|
|
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.
|
|
150
|
-
(0, exports.cypressLogger)('
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
if (config.debug) {
|
|
144
|
+
(0, exports.cypressLogger)('consoleMessage_excluded', {
|
|
145
|
+
consoleMessage: consoleMessage,
|
|
146
|
+
someConsoleMessagesExcluded: someConsoleMessagesExcluded,
|
|
153
147
|
});
|
|
154
148
|
}
|
|
155
|
-
return !
|
|
149
|
+
return !someConsoleMessagesExcluded;
|
|
156
150
|
});
|
|
157
151
|
};
|
|
158
|
-
exports.
|
|
159
|
-
var
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
|
165
|
+
return consoleMessageExcluded;
|
|
170
166
|
};
|
|
171
|
-
exports.
|
|
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; } });
|
package/dist/types/Config.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ConsoleType } from "./ConsoleType";
|
|
2
2
|
export interface Config {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
consoleMessages?: (string | RegExp)[];
|
|
4
|
+
consoleTypes?: (ConsoleType)[];
|
|
5
|
+
debug?: boolean;
|
|
6
6
|
}
|
|
@@ -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
|
+
"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": "
|
|
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.
|
|
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.
|
|
53
|
+
"typescript": "4.8.4"
|
|
54
54
|
}
|
|
55
55
|
}
|