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 +18 -38
- package/dist/index.d.ts +4 -4
- package/dist/index.js +55 -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,13 +64,16 @@ 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 () {
|
|
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.
|
|
85
|
-
config.
|
|
86
|
-
chai.expect((0, type_detect_1.default)(
|
|
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(
|
|
92
|
+
chai.expect(consoleMessage.toString()).to.have.length.above(0);
|
|
91
93
|
});
|
|
92
94
|
}
|
|
93
|
-
if (config.
|
|
94
|
-
chai.expect(config.
|
|
95
|
-
config.
|
|
96
|
-
chai.expect(
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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.
|
|
116
|
-
|
|
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 (
|
|
122
|
+
spies.forEach(function (spy) { return spy.resetHistory(); });
|
|
124
123
|
return spies;
|
|
125
124
|
};
|
|
126
125
|
exports.resetSpies = resetSpies;
|
|
127
|
-
var
|
|
128
|
-
var
|
|
129
|
-
Array.from(spies.values()).
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
errorMessage = includedCall;
|
|
135
|
-
}
|
|
130
|
+
return false;
|
|
131
|
+
includedConsoleMessage = (0, exports.findConsoleMessageIncluded)(spy, config);
|
|
132
|
+
return includedConsoleMessage !== undefined;
|
|
136
133
|
});
|
|
137
|
-
return
|
|
134
|
+
return includedConsoleMessage;
|
|
138
135
|
};
|
|
139
|
-
exports.
|
|
140
|
-
var
|
|
141
|
-
var
|
|
142
|
-
if (config.
|
|
143
|
-
return
|
|
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
|
|
146
|
-
var
|
|
147
|
-
return (0, exports.
|
|
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.
|
|
150
|
-
(0, exports.cypressLogger)('
|
|
151
|
-
|
|
152
|
-
|
|
146
|
+
if (config.debug) {
|
|
147
|
+
(0, exports.cypressLogger)('consoleMessage_excluded', {
|
|
148
|
+
consoleMessage: consoleMessage,
|
|
149
|
+
someConsoleMessagesExcluded: someConsoleMessagesExcluded,
|
|
153
150
|
});
|
|
154
151
|
}
|
|
155
|
-
return !
|
|
152
|
+
return !someConsoleMessagesExcluded;
|
|
156
153
|
});
|
|
157
154
|
};
|
|
158
|
-
exports.
|
|
159
|
-
var
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
|
168
|
+
return consoleMessageExcluded;
|
|
170
169
|
};
|
|
171
|
-
exports.
|
|
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; } });
|
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.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": "
|
|
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.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.
|
|
53
|
+
"typescript": "4.8.4"
|
|
54
54
|
}
|
|
55
55
|
}
|