CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-wdio--mocha-framework

A WebdriverIO plugin that provides an adapter for integrating the Mocha testing framework with WebdriverIO's browser automation capabilities.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

@wdio/mocha-framework

@wdio/mocha-framework is a WebdriverIO plugin that provides an adapter for integrating the Mocha testing framework with WebdriverIO's browser automation capabilities. It enables developers to write and execute end-to-end browser tests using Mocha's familiar BDD, TDD, and QUnit interfaces with full access to WebdriverIO's browser control APIs.

Package Information

  • Package Name: @wdio/mocha-framework
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @wdio/mocha-framework

Core Imports

// Main adapter factory
import adapterFactory from "@wdio/mocha-framework";

// Direct class import 
import { MochaAdapter } from "@wdio/mocha-framework";

// Common utilities (from /common subpath export)
import { formatMessage, setupEnv, requireExternalModules, loadModule } from "@wdio/mocha-framework/common";

// Type definitions
import type { MochaOpts, FrameworkMessage, FormattedMessage } from "@wdio/mocha-framework";

For CommonJS:

const adapterFactory = require("@wdio/mocha-framework");
const { MochaAdapter } = require("@wdio/mocha-framework");

Basic Usage

// WebdriverIO configuration using the framework
export const config = {
  framework: 'mocha',
  mochaOpts: {
    ui: 'bdd',
    timeout: 60000
  }
};

// Direct adapter usage (advanced)
import adapterFactory from "@wdio/mocha-framework";

const adapter = await adapterFactory.init(
  'session-id',
  config,
  ['/path/to/spec.js'],
  { browserName: 'chrome' },
  reporter
);

const exitCode = await adapter.run();

Architecture

The adapter is built around several key components:

  • Adapter Factory: Entry point that creates and initializes MochaAdapter instances
  • MochaAdapter Class: Core adapter that manages Mocha integration with WebdriverIO
  • Event System: Maps Mocha events to WebdriverIO events for reporting and lifecycle management
  • Hook Integration: Wraps WebdriverIO hooks to work within Mocha's execution flow
  • Message Formatting: Transforms internal framework messages into structured reporting data

Capabilities

Adapter Factory

Factory function for creating configured MochaAdapter instances.

/**
 * Factory object containing the init function for creating MochaAdapter instances
 */
declare const adapterFactory: {
  init?: (...args: unknown[]) => Promise<MochaAdapter>;
}

export default adapterFactory;

MochaAdapter Class

Main adapter class that integrates Mocha with WebdriverIO's test execution flow.

/**
 * Main adapter class that integrates Mocha testing framework with WebdriverIO
 */
class MochaAdapter {
  /**
   * Creates a new MochaAdapter instance
   * @param cid - Capability ID for the test session
   * @param config - WebdriverIO configuration with Mocha options
   * @param specs - Array of test spec file paths
   * @param capabilities - Browser capabilities
   * @param reporter - Event emitter for test reporting
   */
  constructor(
    cid: string,
    config: ParsedConfiguration,
    specs: string[],
    capabilities: WebdriverIO.Capabilities,
    reporter: EventEmitter
  );

  /**
   * Initializes the adapter and configures Mocha
   * @returns Promise resolving to the initialized adapter instance
   */
  async init(): Promise<MochaAdapter>;

  /**
   * Checks whether the adapter has tests to run
   * @returns true if tests are available, false otherwise
   */
  hasTests(): boolean;

  /**
   * Runs the test suite and returns the exit code
   * @returns Promise resolving to the test run exit code (0 for success)
   */
  async run(): Promise<number>;

  /**
   * Wraps WebdriverIO hooks for async execution within Mocha
   * @param hookName - Name of the hook to wrap
   * @returns Wrapped hook function
   */
  wrapHook(hookName: keyof Services.HookFunctions): () => Promise<void>;

  /**
   * Prepares framework messages for hooks
   * @param hookName - Name of the hook
   * @returns Formatted message for the hook
   */
  prepareMessage(hookName: keyof Services.HookFunctions): FormattedMessage;

  /**
   * Emits test events to the reporter
   * @param event - Event type
   * @param payload - Event payload data
   * @param err - Optional error object
   */
  emit(event: string, payload: Record<string, unknown>, err?: MochaError): void;

  /**
   * Generates unique identifiers for test events
   * @param message - Framework message to generate UID for
   * @returns Unique identifier string
   */
  getUID(message: FrameworkMessage): string;
}

Message Formatting

Utilities for formatting test framework messages for reporting.

/**
 * Formats test framework messages for reporting
 * @param params - Framework message parameters
 * @returns Formatted message object
 */
function formatMessage(params: FrameworkMessage): FormattedMessage;

Environment Setup

Sets up the testing environment by wrapping global test methods.

/**
 * Sets up the testing environment by wrapping global test methods
 * @param cid - Capability ID
 * @param options - Mocha options
 * @param beforeTest - Before test hook
 * @param beforeHook - Before hook
 * @param afterTest - After test hook  
 * @param afterHook - After hook
 * @returns Array of promises resolving to loaded modules
 */
function setupEnv(
  cid: string,
  options: MochaOpts,
  beforeTest: Hook,
  beforeHook: Hook,
  afterTest: Hook,
  afterHook: Hook
): Promise<unknown>[];

Module Loading

Utilities for dynamically loading external modules.

/**
 * Requires external modules for compilation/transformation
 * @param mods - Array of module names to require
 * @param loader - Optional custom loader function
 * @returns Array of promises resolving to loaded modules
 */
function requireExternalModules(
  mods: string[],
  loader?: (name: string) => Promise<unknown>
): Promise<unknown>[];

/**
 * Dynamically imports modules with error handling
 * @param name - Module name to import
 * @returns Promise resolving to the imported module
 */
async function loadModule(name: string): Promise<unknown>;

Types

Configuration Types

/**
 * Mocha configuration options for WebdriverIO
 */
interface MochaOpts {
  /** Modules to require before tests */
  require?: string[];
  /** Compiler modules for file transformation */
  compilers?: string[];
  /** Allow uncaught errors */
  allowUncaught?: boolean;
  /** Force done callback or promise */
  asyncOnly?: boolean;
  /** Bail after first test failure */
  bail?: boolean;
  /** Check for global variable leaks */
  checkLeaks?: boolean;
  /** Delay root suite execution */
  delay?: boolean;
  /** Test filter given string */
  fgrep?: string;
  /** Tests marked only fail the suite */
  forbidOnly?: boolean;
  /** Pending tests fail the suite */
  forbidPending?: boolean;
  /** Full stacktrace upon failure */
  fullTrace?: boolean;
  /** Variables expected in global scope */
  global?: string[];
  /** Test filter given regular expression */
  grep?: RegExp | string;
  /** Invert test filter matches */
  invert?: boolean;
  /** Number of times to retry failed tests */
  retries?: number;
  /** Timeout threshold value */
  timeout?: number | string;
  /** Set test UI to one of the built-in test interfaces */
  ui?: 'bdd' | 'tdd' | 'qunit' | 'exports';
}

Message Types

/**
 * Error structure for Mocha test failures
 */
interface MochaError {
  /** Error name */
  name: string;
  /** Error message */
  message: string;
  /** Stack trace */
  stack: string;
  /** Error type */
  type: string;
  /** Expected value in assertion */
  expected: unknown;
  /** Actual value in assertion */
  actual: unknown;
}

/**
 * Internal message structure for framework events
 */
interface FrameworkMessage {
  /** Message type */
  type: string;
  /** Message payload */
  payload?: unknown;
  /** Associated error */
  err?: MochaError;
}

/**
 * Formatted message structure for test reporting
 */
interface FormattedMessage {
  /** Message type */
  type: string;
  /** Capability ID */
  cid?: string;
  /** Spec file paths */
  specs?: string[];
  /** Unique identifier */
  uid?: string;
  /** Test/suite title */
  title?: string;
  /** Parent suite title */
  parent?: string;
  /** Full hierarchical title */
  fullTitle?: string;
  /** Whether test is pending */
  pending?: boolean;
  /** Whether test passed */
  passed?: boolean;
  /** Source file path */
  file?: string;
  /** Execution duration in milliseconds */
  duration?: number;
  /** Current test name */
  currentTest?: string;
  /** Test error */
  error?: MochaError;
  /** Test context */
  context?: unknown;
  /** Test body */
  body?: string;
}

Utility Types

/**
 * Hook function type used in setupEnv function
 */
type Hook = Function | Function[];

Re-exports

The package re-exports Mocha's default export in the types file:

/**
 * Default export from Mocha for direct access to Mocha class (from types.ts)
 */
export { default } from 'mocha';

Global Type Extensions

declare global {
  namespace WebdriverIO {
    interface MochaOpts extends MochaOptsImport {}
  }
}
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@wdio/mocha-framework@9.19.x
Publish Source
CLI
Badge
tessl/npm-wdio--mocha-framework badge