@brillout/test-e2e 0.6.8 → 0.6.10

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 CHANGED
@@ -12,6 +12,7 @@ type LogSource = 'stdout' | 'stderr' | 'Browser Error' | 'Browser Warning' | 'Br
12
12
  type LogEntry = {
13
13
  logSource: LogSource;
14
14
  logText: string;
15
+ logInfo: string;
15
16
  logTimestamp: string;
16
17
  isNotFailure: boolean;
17
18
  loggedAfterExit: boolean;
@@ -20,9 +21,10 @@ declare function hasFailLogs(failOnWarning: boolean): boolean;
20
21
  declare function clearLogs(): void;
21
22
  declare function logErrorsAndWarnings(): void;
22
23
  declare function flushLogs(): void;
23
- declare function add({ logSource, logText, loggedAfterExit, }: {
24
+ declare function add({ logSource, logText, logInfo, loggedAfterExit, }: {
24
25
  logSource: LogSource;
25
26
  logText: string;
27
+ logInfo?: string;
26
28
  loggedAfterExit?: boolean;
27
29
  }): void;
28
30
  /**
package/dist/Logs.js CHANGED
@@ -57,11 +57,12 @@ function flushLogs() {
57
57
  logEntries.filter((logEntry) => !logEntry.loggedAfterExit).forEach((logEntry) => printLog(logEntry));
58
58
  logEntries = [];
59
59
  }
60
- function add({ logSource, logText, loggedAfterExit = false, }) {
60
+ function add({ logSource, logText, logInfo = '', loggedAfterExit = false, }) {
61
61
  const logTimestamp = getTimestamp();
62
62
  const logEntry = {
63
63
  logSource,
64
64
  logText,
65
+ logInfo,
65
66
  logTimestamp,
66
67
  isNotFailure: isTolerateError({ logSource, logText }),
67
68
  loggedAfterExit,
@@ -35,6 +35,7 @@ type TestInfo = {
35
35
  terminateServer?: () => Promise<void>;
36
36
  afterEach?: (hasFailed: boolean) => void;
37
37
  page?: Page;
38
+ aborted?: true;
38
39
  };
39
40
  declare function getCurrentTest(): TestInfo;
40
41
  declare function getCurrentTestOptional(): null | TestInfo;
package/dist/run.js CHANGED
@@ -69,11 +69,12 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
69
69
  };
70
70
  return;
71
71
  // Also called when the page throws an error or a warning
72
- function onConsole(msg) {
72
+ async function onConsole(msg) {
73
73
  const type = msg.type();
74
+ const isError = type === 'error';
74
75
  Logs.add({
75
76
  logSource: (() => {
76
- if (type === 'error') {
77
+ if (isError) {
77
78
  return 'Browser Error';
78
79
  }
79
80
  if (type === 'warning') {
@@ -81,16 +82,18 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
81
82
  }
82
83
  return 'Browser Log';
83
84
  })(),
84
- logText: JSON.stringify({
85
+ logText: msg.text(),
86
+ logInfo: JSON.stringify({
85
87
  type,
86
- text: msg.text(),
87
88
  location: msg.location(),
88
89
  args: msg.args(),
89
90
  }, null, 2),
90
91
  });
92
+ if (isError)
93
+ await terminateUponBrowserError();
91
94
  }
92
95
  // For uncaught exceptions
93
- function onPageError(err) {
96
+ async function onPageError(err) {
94
97
  Logs.add({
95
98
  logSource: 'Browser Error',
96
99
  logText: JSON.stringify({
@@ -98,6 +101,22 @@ additionalTimeout = 0, serverIsReadyMessage, serverIsReadyDelay = 1000, inspect
98
101
  location: err.stack,
99
102
  }, null, 2),
100
103
  });
104
+ await terminateUponBrowserError();
105
+ }
106
+ async function terminateUponBrowserError() {
107
+ if (!cliOptions.bail)
108
+ return;
109
+ testInfo.aborted = true;
110
+ // Trick to abort the test: page.close() triggers the following error.
111
+ // ```console
112
+ // proxy.waitForFunction: Target closed
113
+ // at clientSideNavigation (.testRun.ts:16:16)
114
+ // at .testRun.ts:11:5
115
+ // at file:///home/rom/code/test-e2e/src/runAll.ts:278:7 {
116
+ // name: 'Error'
117
+ // }
118
+ // ```
119
+ await testInfo.page.close();
101
120
  }
102
121
  }
103
122
  async function startProcess({ serverIsReadyMessage, serverIsReadyDelay, additionalTimeout, cmd, }) {
package/dist/runAll.js CHANGED
@@ -11,11 +11,15 @@ import { loadConfig } from './getConfig.js';
11
11
  import { logError } from './logError.js';
12
12
  import { hasFail, logBoot, logFail, logPass, logWarn, TEST_FAIL } from './logTestStatus.js';
13
13
  import pc from '@brillout/picocolors';
14
+ let browser;
14
15
  async function runAll(filter) {
15
16
  await loadConfig();
16
17
  const testFiles = await findTestFiles(filter);
17
- const browser = await getBrowser();
18
+ browser = await getBrowser();
18
19
  const failedTestFiles = await runTestFiles(testFiles, browser);
20
+ await closeAll(failedTestFiles);
21
+ }
22
+ async function closeAll(failedTestFiles) {
19
23
  await browser.close();
20
24
  const hasFailedTestFile = failedTestFiles.length > 0;
21
25
  const hasFailLog = hasFail();
@@ -134,8 +138,11 @@ async function runServerAndTests(browser, isThirdAttempt, isFlaky) {
134
138
  return false;
135
139
  }
136
140
  let success = await runTests(testInfo, isFinalAttempt);
141
+ return await closeTest(testInfo, success, isFinalAttempt);
142
+ }
143
+ async function closeTest(testInfo, success, isFinalAttempt) {
137
144
  await testInfo.terminateServer();
138
- await page.close();
145
+ await testInfo.page.close();
139
146
  // Check whether stderr emitted during testInfo.terminateServer()
140
147
  if (success) {
141
148
  const failOnWarning = true;
@@ -181,7 +188,7 @@ async function runTests(testInfo, isFinalAttempt) {
181
188
  const hasErrorLog = Logs.hasFailLogs(failOnWarning);
182
189
  const isFailure = err || hasErrorLog;
183
190
  if (isFailure) {
184
- if (err) {
191
+ if (err && !testInfo.aborted) {
185
192
  logFailure(err, `the test "${testDesc}" threw an error`, isFinalAttempt);
186
193
  }
187
194
  else if (hasErrorLog) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brillout/test-e2e",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
4
4
  "bin": "./bin.js",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",