Repository navigation
feat: Replace mocha with native node:test framework - #22415
Closed
mykola-mokhnach wants to merge 24 commits into
Closed
mykola-mokhnach wants to merge 24 commits into
mykola-mokhnach wants to merge 24 commits into
Conversation
…to mocha-rm # Conflicts: # package-lock.json
There was a problem hiding this comment.
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:testimports/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-supportharness 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; |
This was referenced Jun 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.