@brillout/test-e2e 0.6.20 → 0.6.22
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/dist/Logs.d.ts +3 -1
- package/dist/Logs.js +10 -4
- package/dist/run.d.ts +2 -1
- package/dist/run.js +4 -2
- package/dist/utils/runCommandLongRunning.d.ts +2 -1
- package/dist/utils/runCommandLongRunning.js +10 -4
- package/package.json +1 -1
package/dist/Logs.d.ts
CHANGED
|
@@ -33,11 +33,13 @@ declare function add({ logSource, logText, logInfo, loggedAfterExit, }: {
|
|
|
33
33
|
/**
|
|
34
34
|
* Expect a log to be printed.
|
|
35
35
|
*
|
|
36
|
+
* @param pattern String or RegExp to search for in logs.
|
|
37
|
+
*
|
|
36
38
|
* @param filter Only search in certain types of logs, e.g. only in browser- or server-side logs.
|
|
37
39
|
*
|
|
38
40
|
* @param allLogs Search in all logs, including the logs of previous tests as well as the logs of the setup/prepare scripts. Usually used in combination with the `filter` parameter.
|
|
39
41
|
*/
|
|
40
|
-
declare function expectLog(
|
|
42
|
+
declare function expectLog(pattern: string | RegExp, { filter: logFilter, allLogs }?: {
|
|
41
43
|
filter?: (logEntry: LogEntry) => boolean;
|
|
42
44
|
allLogs?: boolean;
|
|
43
45
|
}): void;
|
package/dist/Logs.js
CHANGED
|
@@ -115,28 +115,34 @@ async function terminateUponErrorLog(logSource) {
|
|
|
115
115
|
/**
|
|
116
116
|
* Expect a log to be printed.
|
|
117
117
|
*
|
|
118
|
+
* @param pattern String or RegExp to search for in logs.
|
|
119
|
+
*
|
|
118
120
|
* @param filter Only search in certain types of logs, e.g. only in browser- or server-side logs.
|
|
119
121
|
*
|
|
120
122
|
* @param allLogs Search in all logs, including the logs of previous tests as well as the logs of the setup/prepare scripts. Usually used in combination with the `filter` parameter.
|
|
121
123
|
*/
|
|
122
|
-
function expectLog(
|
|
124
|
+
function expectLog(pattern, { filter: logFilter, allLogs } = {}) {
|
|
123
125
|
const logList = allLogs ? logEntriesAll : logEntries;
|
|
126
|
+
const isRegex = pattern instanceof RegExp;
|
|
127
|
+
const patternStr = isRegex ? pattern.toString() : `"${pattern}"`;
|
|
124
128
|
const logsFound = logList.filter((logEntry) => {
|
|
125
|
-
|
|
129
|
+
const logText = removeAnsi(logEntry).logText;
|
|
130
|
+
const matches = isRegex ? pattern.test(logText) : logText.includes(pattern);
|
|
131
|
+
if (matches) {
|
|
126
132
|
logEntry.isNotFailure = true;
|
|
127
133
|
return true;
|
|
128
134
|
}
|
|
129
135
|
return false;
|
|
130
136
|
});
|
|
131
137
|
if (logsFound.length === 0) {
|
|
132
|
-
throw new Error(`The following log is expected but it wasn't logged:
|
|
138
|
+
throw new Error(`The following log is expected but it wasn't logged: ${patternStr}`);
|
|
133
139
|
}
|
|
134
140
|
if (!logFilter)
|
|
135
141
|
return;
|
|
136
142
|
const logsFoundAfterFilter = logsFound.filter((logEntry) => logFilter(removeAnsi(logEntry)));
|
|
137
143
|
if (logsFoundAfterFilter.length === 0) {
|
|
138
144
|
console.log(JSON.stringify(logsFound, null, 2));
|
|
139
|
-
throw new Error(`Logs above are matching
|
|
145
|
+
throw new Error(`Logs above are matching ${patternStr} but don't match the filter you provided.`);
|
|
140
146
|
}
|
|
141
147
|
}
|
|
142
148
|
function removeAnsi(logEntry) {
|
package/dist/run.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { run };
|
|
2
2
|
import type { TolerateError } from './Logs/isTolerateError.js';
|
|
3
|
-
declare function run(cmd: string, { additionalTimeout, serverIsReadyMessage, serverIsReadyDelay, inspect, verbose, cwd, tolerateError, serverUrl, isFlaky, }?: {
|
|
3
|
+
declare function run(cmd: string, { additionalTimeout, serverIsReadyMessage, serverIsReadyDelay, inspect, verbose, cwd, tolerateError, serverUrl, isFlaky, tolerateExitCode, }?: {
|
|
4
4
|
additionalTimeout?: number;
|
|
5
5
|
serverIsReadyMessage?: string | ((log: string) => boolean);
|
|
6
6
|
serverIsReadyDelay?: number;
|
|
@@ -11,4 +11,5 @@ declare function run(cmd: string, { additionalTimeout, serverIsReadyMessage, ser
|
|
|
11
11
|
tolerateError?: TolerateError;
|
|
12
12
|
serverUrl?: string;
|
|
13
13
|
isFlaky?: boolean;
|
|
14
|
+
tolerateExitCode?: number[];
|
|
14
15
|
}): void;
|
package/dist/run.js
CHANGED
|
@@ -8,7 +8,7 @@ import { page } from './page.js';
|
|
|
8
8
|
import { TIMEOUT_NPM_SCRIPT, TIMEOUT_PLAYWRIGHT, TIMEOUT_PROCESS_TERMINATION } from './TIMEOUTS.js';
|
|
9
9
|
function run(cmd, {
|
|
10
10
|
//baseUrl = '',
|
|
11
|
-
additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect = cliOptions.inspect, verbose = cliOptions.verbose, cwd, tolerateError, serverUrl, isFlaky, } = {}) {
|
|
11
|
+
additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect = cliOptions.inspect, verbose = cliOptions.verbose, cwd, tolerateError, serverUrl, isFlaky, tolerateExitCode, } = {}) {
|
|
12
12
|
assert(cwd === undefined);
|
|
13
13
|
additionalTimeout += serverIsReadyDelay;
|
|
14
14
|
setRunInfo({
|
|
@@ -32,6 +32,7 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
32
32
|
additionalTimeout,
|
|
33
33
|
serverIsReadyMessage,
|
|
34
34
|
serverIsReadyDelay,
|
|
35
|
+
tolerateExitCode,
|
|
35
36
|
});
|
|
36
37
|
page.on('console', onConsole);
|
|
37
38
|
page.on('pageerror', onPageError);
|
|
@@ -104,7 +105,7 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
|
|
|
104
105
|
});
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
|
-
async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, additionalTimeout, cmd, }) {
|
|
108
|
+
async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, additionalTimeout, cmd, tolerateExitCode, }) {
|
|
108
109
|
const cwd = getCwd();
|
|
109
110
|
if (!serverIsReadyMessage) {
|
|
110
111
|
serverIsReadyMessage = (log) => {
|
|
@@ -129,6 +130,7 @@ async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, addition
|
|
|
129
130
|
isReadyLog: serverIsReadyMessage,
|
|
130
131
|
isReadyTimeout: TIMEOUT_NPM_SCRIPT + additionalTimeout,
|
|
131
132
|
killPort: process.env.CI || !isLinux() ? false : getServerPort(),
|
|
133
|
+
tolerateExitCode,
|
|
132
134
|
onStderr(data, { loggedAfterExit }) {
|
|
133
135
|
Logs.add({
|
|
134
136
|
logSource: 'stderr',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { runCommandLongRunning };
|
|
2
|
-
declare function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReadyTimeout, onStdout, onStderr, onExit, onTerminationError, terminationTimeout, }: {
|
|
2
|
+
declare function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReadyTimeout, onStdout, onStderr, onExit, onTerminationError, terminationTimeout, tolerateExitCode, }: {
|
|
3
3
|
cmd: string;
|
|
4
4
|
cwd: string;
|
|
5
5
|
killPort: false | number;
|
|
@@ -14,6 +14,7 @@ declare function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReady
|
|
|
14
14
|
onExit: (errMsg?: string) => void;
|
|
15
15
|
onTerminationError: (errMsg: string) => void;
|
|
16
16
|
terminationTimeout: number;
|
|
17
|
+
tolerateExitCode?: number[];
|
|
17
18
|
}): {
|
|
18
19
|
terminate: (force?: true) => Promise<void>;
|
|
19
20
|
isReadyPromise: Promise<void>;
|
|
@@ -2,7 +2,7 @@ export { runCommandLongRunning };
|
|
|
2
2
|
import { spawn } from 'child_process';
|
|
3
3
|
import stripAnsi from 'strip-ansi';
|
|
4
4
|
import { assert, runCommandShortLived, humanizeTime, isWindows, isLinux, isCallable } from '../utils.js';
|
|
5
|
-
function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReadyTimeout, onStdout, onStderr, onExit, onTerminationError, terminationTimeout, }) {
|
|
5
|
+
function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReadyTimeout, onStdout, onStderr, onExit, onTerminationError, terminationTimeout, tolerateExitCode, }) {
|
|
6
6
|
if (killPort)
|
|
7
7
|
killByPort(killPort);
|
|
8
8
|
let onError;
|
|
@@ -82,7 +82,7 @@ function runCommandLongRunning({ cmd, cwd, killPort, isReadyLog, isReadyTimeout,
|
|
|
82
82
|
let errMsg;
|
|
83
83
|
{
|
|
84
84
|
const exitIsExpected = isReady === true || isReadyPromiseTimedOut;
|
|
85
|
-
if (!isSuccessCode(code)) {
|
|
85
|
+
if (!isSuccessCode(code, tolerateExitCode)) {
|
|
86
86
|
errMsg = `Unexpected termination of command \`${cmd}\` with exit code ${code}`;
|
|
87
87
|
}
|
|
88
88
|
else if (!exitIsExpected) {
|
|
@@ -219,8 +219,14 @@ async function killByPort(port) {
|
|
|
219
219
|
assert(port);
|
|
220
220
|
await runCommandShortLived(`fuser -k ${port}/tcp`, { swallowError: true, timeout: 10 * 1000 });
|
|
221
221
|
}
|
|
222
|
-
function isSuccessCode(code) {
|
|
223
|
-
|
|
222
|
+
function isSuccessCode(code, tolerateExitCode) {
|
|
223
|
+
if (code === 0 || code === null || (code === 1 && isWindows())) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
if (tolerateExitCode?.includes(code)) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
return false;
|
|
224
230
|
}
|
|
225
231
|
// Workaround for Node.js regression:
|
|
226
232
|
// - https://github.com/nodejs/node/issues/52475
|