Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'e2e/fixtures.js')
-rw-r--r--e2e/fixtures.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/e2e/fixtures.js b/e2e/fixtures.js
new file mode 100644
index 000000000..ce46de5bb
--- /dev/null
+++ b/e2e/fixtures.js
@@ -0,0 +1,69 @@
+/* This file extends the base functionality of the playwright test framework to enable
+ * code coverage instrumentation, console log error detection and working with a 3rd
+ * party Chrome-as-a-service extension called Browserless.
+ */
+
+const base = require('@playwright/test');
+const { expect } = require('@playwright/test');
+const fs = require('fs');
+const path = require('path');
+const { v4: uuid } = require('uuid');
+
+/**
+ * Takes a `ConsoleMessage` and returns a formatted string
+ * @param {import('@playwright/test').ConsoleMessage} msg
+ * @returns {String} formatted string with message type, text, url, and line and column numbers
+ */
+function consoleMessageToString(msg) {
+ const { url, lineNumber, columnNumber } = msg.location();
+
+ return `[${msg.type()}] ${msg.text()}
+ at (${url} ${lineNumber}:${columnNumber})`;
+}
+
+//The following is based on https://github.com/mxschmitt/playwright-test-coverage
+// eslint-disable-next-line no-undef
+const istanbulCLIOutput = path.join(process.cwd(), '.nyc_output');
+
+// eslint-disable-next-line no-undef
+exports.test = base.test.extend({
+ //The following is based on https://github.com/mxschmitt/playwright-test-coverage
+ context: async ({ context }, use) => {
+ await context.addInitScript(() =>
+ window.addEventListener('beforeunload', () =>
+ (window).collectIstanbulCoverage(JSON.stringify((window).__coverage__))
+ )
+ );
+ await fs.promises.mkdir(istanbulCLIOutput, { recursive: true });
+ await context.exposeFunction('collectIstanbulCoverage', (coverageJSON) => {
+ if (coverageJSON) {
+ fs.writeFileSync(path.join(istanbulCLIOutput, `playwright_coverage_${uuid()}.json`), coverageJSON);
+ }
+ });
+ await use(context);
+ for (const page of context.pages()) {
+ await page.evaluate(() => (window).collectIstanbulCoverage(JSON.stringify((window).__coverage__)));
+ }
+ },
+ page: async ({ baseURL, page }, use) => {
+ const messages = [];
+ page.on('console', (msg) => messages.push(msg));
+ await use(page);
+ messages.forEach(
+ msg => expect.soft(msg.type(), `Console error detected: ${consoleMessageToString(msg)}`).not.toEqual('error')
+ );
+ },
+ browser: async ({ playwright, browser }, use, workerInfo) => {
+ // Use browserless if configured
+ if (workerInfo.project.name.match(/browserless/)) {
+ const vBrowser = await playwright.chromium.connectOverCDP({
+ endpointURL: 'ws://localhost:3003'
+ });
+ await use(vBrowser);
+ } else {
+ // Use Local Browser for testing.
+ await use(browser);
+ }
+ }
+});
+