Skip to content

feat: Replace mocha with native node:test framework - #22415

Closed
mykola-mokhnach wants to merge 24 commits into
appium:masterfrom
mykola-mokhnach:mocha-rm
Closed

mykola-mokhnach wants to merge 24 commits into
appium:masterfrom
mykola-mokhnach:mocha-rm

Conversation

@mykola-mokhnach

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates this monorepo’s test runner from Mocha/ts-node to Node’s built-in node:test, updating package scripts to execute compiled test output (build/test/**) and removing the @appium/driver-test-support package in favor of in-repo helpers.

Changes:

  • Replace Mocha usage across packages with node:test imports/hooks and Node test runner CLI flags.
  • Adjust build/test workflow to run tests from compiled JS and copy non-code test fixtures into build/test/**.
  • Remove @appium/driver-test-support, update related TS configs/references, and evolve @appium/plugin-test-support harness API.

Reviewed changes

Copilot reviewed 189 out of 191 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tsconfig.json Remove ts-node config and drop driver-test-support project reference.
scripts/copy-test-assets.mjs New script to copy non-code test assets into build/test/**.
package.json Add build:test-assets; remove Mocha/ts-node deps and related typings.
eslint.config.mjs Remove special ESLint config overlay for test-support packages.
.vscode/launch.json Update debug config to run Node’s test runner on built files.
.mocharc.js Remove root Mocha config.
.github/workflows/build.yml Stop including .mocharc.js in workflow path triggers; CI uses build step before tests.
.github/labeler.yml Remove label mapping for deleted @appium/driver-test-support package.
packages/tsconfig/tsconfig.json Remove ts-node config from shared tsconfig package.
packages/support/tsconfig.json Drop Mocha types; reformat paths/references.
packages/support/package.json Switch unit/e2e test scripts to node --test over build/test/**.
packages/support/test/unit/util.spec.ts Import hooks from node:test.
packages/support/test/unit/timing.spec.ts Replace this.skip() with {skip: ...} options on describe().
packages/support/test/unit/tempdir.spec.ts Import hooks from node:test.
packages/support/test/unit/system.spec.ts Convert promise-returning test to async/await.
packages/support/test/unit/process.spec.ts Replace this.skip() blocks with {skip: ...} options on describe().
packages/support/test/unit/plist.spec.ts Import hooks from node:test.
packages/support/test/unit/npm.spec.ts Import hooks from node:test.
packages/support/test/unit/node.spec.ts Import hooks from node:test.
packages/support/test/unit/net.spec.ts Import hooks from node:test.
packages/support/test/unit/logger/logger-test.spec.ts Import hooks from node:test.
packages/support/test/unit/logger/logger-normal.spec.ts Import hooks from node:test.
packages/support/test/unit/logger/logger-force.spec.ts Import hooks from node:test.
packages/support/test/unit/internal/read-package.spec.ts Import hooks from node:test.
packages/support/test/unit/internal/base64-encode-stream.spec.ts Import hooks from node:test.
packages/support/test/unit/index.spec.ts Import hooks from node:test.
packages/support/test/unit/fs.spec.ts Replace Mocha timeouts/skip with node:test options; update fixture extensions to .js.
packages/support/test/unit/env.spec.ts Import hooks from node:test.
packages/support/test/unit/console.spec.ts Import hooks from node:test.
packages/support/test/e2e/zip.e2e.spec.ts Replace this.skip() with {skip: ...} options on describe().
packages/support/test/e2e/util.e2e.spec.ts Replace per-test this.timeout() with node:test {timeout: ...} options.
packages/support/test/e2e/npm.e2e.spec.ts Import hooks from node:test.
packages/support/test/e2e/node.e2e.spec.ts Import hooks from node:test.
packages/support/test/e2e/net.e2e.spec.ts Import hooks from node:test.
packages/support/test/e2e/mjpeg.e2e.spec.ts Import hooks from node:test.
packages/support/test/e2e/image-util.e2e.spec.ts Import hooks from node:test.
packages/support/test/e2e/fs.e2e.spec.ts Replace this.skip() with {skip: ...} options on describe().
packages/support/test/e2e/env.e2e.spec.ts Import hooks from node:test.
packages/logger/tsconfig.json Drop Mocha types.
packages/logger/package.json Switch unit tests to node --test over build/test/**.
packages/logger/test/unit/utils-specs.ts Import describe/it from node:test.
packages/logger/test/unit/preprocessor-specs.ts Import hooks from node:test.
packages/logger/test/unit/display-specs.ts Import hooks from node:test.
packages/logger/test/unit/basic-specs.ts Import hooks from node:test.
packages/opencv/tsconfig.json Drop Mocha types; keep node/chai types.
packages/opencv/package.json Switch unit/e2e tests to node --test over build/test/**.
packages/opencv/test/unit/opencv.spec.ts Import node:test and convert timeout usage to {timeout: ...}.
packages/opencv/test/e2e/opencv.e2e.spec.ts Import node:test and move suite timeout to {timeout: ...}.
packages/schema/package.json Restrict published files to build/lib + lib + tsconfig.json.
packages/universal-xml-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/universal-xml-plugin/package.json Switch unit tests to node --test on built JS; restrict published files.
packages/universal-xml-plugin/test/unit/xpath.spec.ts Import describe/it from node:test.
packages/universal-xml-plugin/test/unit/source.spec.ts Import describe/it from node:test.
packages/universal-xml-plugin/test/unit/plugin.spec.ts Import describe/it from node:test.
packages/strongbox/tsconfig.json Drop Mocha types.
packages/strongbox/package.json Switch unit/e2e tests to node --test over build/test/**.
packages/strongbox/test/unit/strongbox.spec.ts Replace dynamic chai import with static chai + chai-as-promised setup; import node:test hooks.
packages/strongbox/test/unit/base-item.spec.ts Replace dynamic chai import with static chai + chai-as-promised setup; import node:test hooks.
packages/strongbox/test/e2e/strongbox.e2e.spec.ts Replace dynamic chai import with static chai + chai-as-promised setup; import node:test hooks.
packages/storage-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/storage-plugin/package.json Switch unit/e2e tests to node --test over build/test/**.
packages/storage-plugin/test/unit/storage.spec.ts Import node:test hooks.
packages/storage-plugin/test/e2e/storage.e2e.spec.ts Adapt to new plugin-test-support harness; use node.getModuleRootSync for plugin root.
packages/images-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/images-plugin/package.json Switch unit/e2e tests to node --test over build/test/**.
packages/images-plugin/test/unit/plugin.spec.ts Import node:test; move suite timeout to {timeout: ...}.
packages/images-plugin/test/unit/image-element.spec.ts Import node:test hooks.
packages/images-plugin/test/unit/finder.spec.ts Import node:test hooks.
packages/images-plugin/test/e2e/plugin.e2e.spec.ts Adapt to new plugin-test-support harness; use node.getModuleRootSync for plugin root.
packages/relaxed-caps-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/relaxed-caps-plugin/package.json Switch unit tests to node --test over built JS.
packages/relaxed-caps-plugin/test/unit/plugin.spec.ts Import node:test hooks.
packages/fake-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/fake-plugin/package.json Switch unit tests to node --test over built JS.
packages/fake-plugin/test/unit/plugin.spec.ts Import node:test hooks.
packages/fake-driver/tsconfig.json Drop Mocha types and remove driver-test-support path/reference.
packages/fake-driver/package.json Switch unit/e2e tests to node --test over built JS.
packages/fake-driver/test/unit/driver.spec.ts Remove driver-test-support suite usage; import node:test hooks.
packages/fake-driver/test/e2e/general-tests.ts Import node:test hooks.
packages/fake-driver/test/e2e/find-element-tests.ts Import node:test hooks.
packages/fake-driver/test/e2e/element-interaction-tests.ts Import node:test hooks.
packages/fake-driver/test/e2e/context-tests.ts Import node:test hooks.
packages/fake-driver/test/e2e/alert-tests.ts Replace this.fail() with throw; import node:test hooks.
packages/fake-driver/test/e2e/driver.e2e.spec.ts Remove driver-test-support suite usage; import node:test hooks.
packages/base-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/base-plugin/package.json Switch unit tests to node --test over built JS.
packages/base-plugin/test/unit/plugin.spec.ts Import node:test hooks.
packages/execute-driver-plugin/tsconfig.json Replace Mocha typings with Node typings.
packages/execute-driver-plugin/package.json Switch unit/e2e tests to node --test over built JS.
packages/execute-driver-plugin/test/unit/vm-host-binding.spec.ts Import node:test hooks.
packages/execute-driver-plugin/test/unit/plugin.spec.ts Import node:test hooks.
packages/execute-driver-plugin/test/e2e/plugin.e2e.spec.ts Adapt to new plugin-test-support harness; ensure teardown runs.
packages/plugin-test-support/tsconfig.json Drop Mocha types; reformat references.
packages/plugin-test-support/package.json Bump major version; remove mocha peer dep; keep as Appium-only peer dep.
packages/plugin-test-support/lib/types.ts Remove Mocha hook types; add PluginSetup/PluginTeardown types.
packages/plugin-test-support/lib/index.ts Export new setup/teardown types.
packages/plugin-test-support/lib/harness.ts Change harness to return setup()/teardown() instead of wiring Mocha hooks.
packages/driver-test-support/tsconfig.json Deleted (package removed).
packages/driver-test-support/package.json Deleted (package removed).
packages/driver-test-support/README.md Deleted (package removed).
packages/driver-test-support/test/unit/index.spec.ts Deleted (package removed).
packages/driver-test-support/lib/index.ts Deleted (package removed).
packages/driver-test-support/lib/helpers.ts Deleted (package removed).
packages/driver-test-support/lib/types.ts Deleted (package removed).
packages/driver-test-support/lib/unit-suite.ts Deleted (package removed).
packages/driver-test-support/lib/e2e-suite.ts Deleted (package removed).
packages/base-driver/tsconfig.json Drop ts-node and driver-test-support ref; include tests in compilation.
packages/base-driver/package.json Switch tests to node --test; adjust main entry and published files; remove root index.js shim.
packages/base-driver/index.js Deleted (no longer needed; main points to build/lib).
packages/base-driver/lib/index.ts Export ServerOpts as a proper TypeScript type export.
packages/base-driver/test/helpers.ts New test helper module (port allocation, server lifecycle, URL helpers).
packages/base-driver/test/types/basedriver/driver.test-d.ts Update import to avoid distfiles path.
packages/base-driver/test/unit/utils.spec.ts Import node:test hooks.
packages/base-driver/test/unit/test-pages/template.spec.ts Import node:test hooks.
packages/base-driver/test/unit/test-pages/handlers.spec.ts Import node:test hooks.
packages/base-driver/test/unit/protocol/routes.spec.ts Import node:test hooks.
packages/base-driver/test/unit/protocol/protocol.spec.ts Replace FakeDriver import with BaseDriver; import node:test hooks.
packages/base-driver/test/unit/protocol/errors.spec.ts Import node:test hooks.
packages/base-driver/test/unit/jsonwp-status/status.spec.ts Import node:test hooks.
packages/base-driver/test/unit/jsonwp-proxy/url.spec.ts Switch helper imports to in-repo helpers; import node:test hooks.
packages/base-driver/test/unit/jsonwp-proxy/proxy.spec.ts Switch helper imports to in-repo helpers; import node:test hooks.
packages/base-driver/test/unit/jsonwp-proxy/protocol-converter.spec.ts Import node:test hooks; add explicit param types in callback.
packages/base-driver/test/unit/express/test-pages-gating.spec.ts Switch helper imports; remove force-port arg; import node:test hooks.
packages/base-driver/test/unit/express/server.spec.ts Switch helper imports; remove force-port arg; import node:test hooks.
packages/base-driver/test/unit/express/middleware.spec.ts Import node:test hooks.
packages/base-driver/test/unit/basedriver/timeout.spec.ts Import node:test hooks.
packages/base-driver/test/unit/basedriver/ipc.spec.ts Import node:test hooks; adjust async rejection assertion typing.
packages/base-driver/test/unit/basedriver/helpers.spec.ts Import node:test hooks.
packages/base-driver/test/unit/basedriver/driver.spec.ts Inline the former driver-test-support unit suite logic into BaseDriver tests using node:test.
packages/base-driver/test/unit/basedriver/device-settings.spec.ts Import node:test hooks.
packages/base-driver/test/unit/basedriver/commands/log.spec.ts Import node:test hooks; add chai-as-promised setup.
packages/base-driver/test/unit/basedriver/commands/event.spec.ts Import node:test hooks.
packages/base-driver/test/unit/basedriver/capability.spec.ts Import node:test hooks; use node:test timeouts.
packages/base-driver/test/unit/basedriver/capabilities.spec.ts Import node:test hooks.
packages/base-driver/test/e2e/protocol/fake-driver.ts Add explicit “no capabilities provided” guard for test driver sessions.
packages/base-driver/test/e2e/protocol/protocol.e2e.spec.ts Refactor e2e server lifecycle; adjust expectations for command/session behaviors.
packages/base-driver/test/e2e/jsonwp-proxy/proxy.e2e.spec.ts Use dynamic free port and initialize JWProxy with host/port.
packages/base-driver/test/e2e/fixtures/custom-element-finder.js Add @ts-nocheck to suppress TS checking for JS fixture.
packages/base-driver/test/e2e/express/server.e2e.spec.ts Switch to node:test; refactor TLS setup and response header usage.
packages/base-driver/test/e2e/basedriver/websockets.e2e.spec.ts Switch helper imports; import node:test hooks.
packages/base-driver/test/e2e/basedriver/logevents.e2e.spec.ts Use new shared createServer helper; import node:test hooks.
packages/base-driver/test/e2e/basedriver/helpers.e2e.spec.ts Switch helper imports; remove force-port arg; import node:test hooks.
packages/base-driver/test/e2e/basedriver/driver.e2e.spec.ts Inline former driver-test-support e2e suite logic using new helpers and node:test.
packages/docutils/tsconfig.json Drop Mocha types and reformat project references.
packages/docutils/package.json Switch unit/e2e tests to node --test over built JS.
packages/docutils/test/unit/util.spec.ts Import node:test hooks.
packages/docutils/test/unit/builder.spec.ts Import node:test hooks.
packages/docutils/test/e2e/build.e2e.spec.ts Import node:test hooks; pass t for skipping Python-dependent tests.
packages/docutils/lib/builder/deploy.ts Move doServe/doDeploy below exported functions (reorder).
packages/appium/tsconfig.json Drop ts-node and Mocha types; reformat references.
packages/appium/package.json Switch unit/e2e tests to node --test over build/test/**.
packages/appium/.mocharc.js Deleted (package Mocha config removed).
packages/appium/test/unit/utils/package-json.spec.ts Import node:test hooks.
packages/appium/test/unit/utils/object.spec.ts Import node:test hooks.
packages/appium/test/unit/utils/hash.spec.ts Import node:test hooks.
packages/appium/test/unit/schema/schema.spec.ts Import node:test hooks.
packages/appium/test/unit/schema/format-errors.spec.ts Import node:test hooks.
packages/appium/test/unit/schema/cli-args.spec.ts Import node:test hooks.
packages/appium/test/unit/schema/arg-spec.spec.ts Import node:test hooks.
packages/appium/test/unit/parser.spec.ts Import node:test hooks.
packages/appium/test/unit/logger.spec.ts Import node:test hooks.
packages/appium/test/unit/helpers/network.spec.ts Import node:test hooks.
packages/appium/test/unit/helpers/capability.spec.ts Import node:test hooks.
packages/appium/test/unit/extension/plugin-config.spec.ts Import node:test hooks.
packages/appium/test/unit/extension/package-changed.spec.ts Import node:test hooks.
packages/appium/test/unit/extension/manifest.spec.ts Import node:test hooks; adapt glob mocking and async rejection assertions.
packages/appium/test/unit/extension/manifest-migrations.spec.ts Import node:test hooks.
packages/appium/test/unit/extension/extension-config.spec.ts Import node:test hooks.
packages/appium/test/unit/extension/extension-command.spec.ts Import node:test hooks; adapt callback-style test signature.
packages/appium/test/unit/extension/driver-config.spec.ts Import node:test hooks.
packages/appium/test/unit/cli/setup-command.spec.ts Import node:test hooks.
packages/appium/test/unit/cli/schema-args.spec.ts Import node:test hooks.
packages/appium/test/unit/cli/cli.spec.ts Import node:test hooks; add chai-as-promised setup.
packages/appium/test/unit/bootstrap/startup-config.spec.ts Import node:test hooks.
packages/appium/test/unit/bootstrap/node-helpers.spec.ts Import node:test hooks.
packages/appium/test/unit/bootstrap/main-helpers.spec.ts Import node:test hooks.
packages/appium/test/unit/bootstrap/grid-v3-register.spec.ts Import node:test hooks.
packages/appium/test/unit/bootstrap/config-file.spec.ts Import node:test hooks; replace this.skip() with t.skip().
packages/appium/test/unit/appiumdriver.spec.ts Import node:test hooks.
packages/appium/test/e2e/schema.e2e.spec.ts Import node:test hooks.
packages/appium/test/e2e/plugin.e2e.spec.ts Import node:test hooks; refactor server setup to explicit setup/teardown.
packages/appium/test/e2e/manifest.e2e.spec.ts Import node:test hooks.
packages/appium/test/e2e/local.e2e.spec.ts Import node:test hooks.
packages/appium/test/e2e/driver.e2e.spec.ts Import node:test hooks; refactor repeated server lifecycle logic; adjust SSL suite skipping.
packages/appium/test/e2e/config.e2e.spec.ts Import node:test hooks.
packages/appium/test/e2e/config-file.e2e.spec.ts Import node:test hooks; replace this.skip() with t.skip().
packages/appium/test/e2e/cli-plugin.e2e.spec.ts Import node:test hooks.
packages/appium/test/e2e/cli-driver.e2e.spec.ts Import node:test hooks; convert suite timeout and conditional skips.
packages/appium/test/e2e/args.e2e.spec.ts Import node:test hooks; convert per-test timeout to node:test options.

Comment on lines +88 to +99
const port = options.port ?? (await getTestPort());
const baseUrl = `http://${TEST_HOST}:${port}`;
let appiumServer: AppiumServer | undefined;
const setup = async () => {
appiumServer = await server({
routeConfiguringFunction: routeConfiguringFunction(driver),
port,
extraMethodMap: options.extraMethodMap,
hostname: options.hostname,
cliArgs: options.cliArgs,
});
};
Comment on lines +173 to 182
it('should start up with our middleware', {skip}, async function () {
const {data} = await looseClient.get(`https://${TEST_HOST}:${port}/`);
expect(data).to.eql('Hello World!');
});
it('should throw if untrusted', async function () {
it('should throw if untrusted', {skip}, async function () {
await expect(axios.get(`https://${TEST_HOST}:${port}/`)).to.eventually.be.rejected;
});
it('should throw if not secure', async function () {
it('should throw if not secure', {skip}, async function () {
await expect(axios.get(`http://${TEST_HOST}:${port}/`)).to.eventually.be.rejected;
});
Comment on lines 799 to 813
beforeEach(async function () {
previousEnvValue = process.env.NODE_TLS_REJECT_UNAUTHORIZED;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
driver = await wdio({...wdOpts, protocol: 'https', strictSSL: false, capabilities});
});

afterEach(async function () {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = previousEnvValue;
if (driver) {
await driver.deleteSession();
}
});

it('should still run bidi over ssl', async function () {
it('should still run bidi over ssl', {skip}, async function () {
expect(await driver.getUrl()).to.not.be.ok;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants