detox
Version:
E2E tests and automation for mobile
316 lines (293 loc) • 10.5 kB
TypeScript
/// <reference types="node" />
/// <reference path="index.d.ts"/>
declare global {
namespace DetoxInternals {
type DetoxStatus = 'inactive' | 'init' | 'active' | 'cleanup';
type Facade = {
//#region Initialization
/**
* Use with a caution, when you still have no config, yet need to avoid {@link Facade#init}
*/
resolveConfig(options?: Partial<DetoxInitOptions>): Promise<RuntimeConfig>;
/**
* Returns one of statuses depending on what’s going with the current Detox context:
*
* `inactive` – before `init()` and after `cleanup()` is called.
* `init` – while `init()` is executing.
* `active` – after `init()` and before `cleanup()` is called.
* `cleanup` – while `cleanup()` is executing.
*/
getStatus(): DetoxStatus;
/**
* Starts a new Detox test session with the provided configuration.
* See {@link https://wix.github.io/Detox/docs/api/internals} for more details.
*/
init(options?: Partial<DetoxInitOptions>): Promise<void>;
/**
* This is the phase where Detox loads its expectation library and boots a device.
* You don't need to call it separately unless you use `init({ workerId: null })` override.
*/
installWorker(options?: Partial<DetoxInstallWorkerOptions>): Promise<void>;
/**
* Deallocates the device.
* Most Client API (device, by, element, expect) will stop working, except for the logger.
*/
uninstallWorker(): Promise<void>;
/**
* This method should be called when the main or child process is about to exit.
* See {@link https://wix.github.io/Detox/docs/api/internals} for more details.
*/
cleanup(): Promise<void>;
//#endregion
//#region Lifecycle
/**
* Reports that the test runner started executing a test suite, e.g. a `beforeAll` hook or a first test.
*/
onRunDescribeStart(event: {
/** Test suite name */
name: string;
}): Promise<void>;
/**
* Reports that the test runner started executing a specific test.
*/
onTestStart(event: {
/** Test name */
title: string;
/** Test name including the ancestor suite titles */
fullName: string;
/**
* N-th time this test is running, if there is a retry mechanism.
*
* @default 1
*/
invocations?: number;
status: 'running';
}): Promise<void>;
/**
* Reports about an error in the midst of `beforeAll`, `beforeEach`, `afterEach`, `afterAll` or any other hook.
*/
onHookFailure(event: {
error: Error | string;
/**
* @example 'beforeAll'
* @example 'afterEach'
*/
hook: string;
}): Promise<void>;
/**
* Reports about an error in the midst of a test function, `test` or `it`.
*/
onTestFnFailure(event: {
error: Error | string;
}): Promise<void>;
/**
* Reports the final status of the test, `passed` or `failed`.
*/
onTestDone(event: {
/** Test name */
title: string;
/** Test name including the ancestor suite titles */
fullName: string;
/**
* N-th time this test is running, if there is a retry mechanism.
*
* @default 1
*/
invocations?: number;
status: 'passed' | 'failed';
/** Whether a timeout was the reason for why the test failed. */
timedOut?: boolean;
}): Promise<void>;
/**
* Reports that the test runner has finished executing a test suite, e.g. all the `afterAll` hooks have been executed or the last test has finished running.
*/
onRunDescribeFinish(event: {
/** Test suite name */
name: string;
}): Promise<void>;
/**
* Workaround for Jest exiting abruptly in --bail mode.
* Makes sure that all workers and their test environments are properly torn down.
* @param [permanent] - forbids further retries
*/
unsafe_conductEarlyTeardown(permanent?: boolean): Promise<void>;
/**
* Reports to Detox CLI about passed and failed test files.
* The failed test files might be re-run again if
* {@link Detox.DetoxTestRunnerConfig#retries} is set to a non-zero.
*
* @param testResults - reports about test files
*/
reportTestResults(testResults: DetoxTestFileReport[]): Promise<void>;
//#endregion
readonly config: RuntimeConfig;
readonly log: Detox.Logger;
readonly session: SessionState;
readonly tracing: {
/**
* Creates a readable stream of the currently recorded events in Chrome Trace Event format.
*
* @see {@link https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU}
* @see {import('trace-event-lib').DurationBeginEvent}
* @see {import('trace-event-lib').DurationEndEvent}
* @see {import('trace-event-lib').InstantEvent}
*/
createEventStream(): NodeJS.ReadableStream;
};
/**
* Not documented on purpose.
* Provides direct access to the object which holds the device driver, websocket client, matchers, expectations, etc.
*/
readonly worker: Worker;
}
interface Worker extends Detox.DetoxExportWrapper {
readonly id: string;
}
type DetoxInitOptions = {
cwd: string;
/**
* @internal
*/
argv: Record<string, unknown>;
testRunnerArgv: Record<string, unknown>;
override: Partial<Detox.DetoxConfig>;
/** @inheritDoc */
global: NodeJS.Global | {};
/**
* Worker ID. Used to distinguish allocated workers in parallel test execution environment.
*
* If explicitly set to null, tells {@link Facade#init} to skip {@link Facade#installWorker} call.
* Useful for complex test runner integrations, where you have to install the worker via a separate call,
* when the environment is ready for that.
*
* @default 'worker'
*/
workerId: string | null;
};
type DetoxInstallWorkerOptions = {
/**
* Used for integration with sandboxed test environments.
* {@link DetoxInternals.Facade#setup} might override {@link Console} methods
* to integrate it with Detox loggeing subsystem.
*/
global: NodeJS.Global | {};
/**
* Worker ID. Used to distinguish allocated workers in parallel test execution environment.
*
* @default 'worker'
*/
workerId: string;
};
type DetoxTestFileReport = {
/**
* Global or relative path to the failed test file.
*/
testFilePath: string;
/**
* Whether the test passed or not.
*/
success: boolean;
/**
* Top-level error if the entire test file failed.
*/
testExecError?: { name?: string; message: string; stack?: string; };
/**
* If the test failed, it should tell whether the failure is permanent.
* Permanent failure means that the test file should not be re-run.
*
* @default false
* @see {Detox.DetoxTestRunnerConfig#retries}
*/
isPermanentFailure?: boolean;
};
type SessionState = Readonly<{
/**
* Randomly generated ID for the entire Detox test session, including retries.
*/
id: string;
/**
* Signalizes that the test session is being torn down.
* Experimental feature for Jest --bail mode.
*/
unsafe_earlyTeardown?: boolean;
/**
* Results of test file executions. Primarily used for Detox CLI retry mechanism.
*/
testResults: DetoxTestFileReport[];
/**
* Retry index of the test session: 0..retriesCount.
*/
testSessionIndex: number;
/**
* Count of Detox contexts with a worker installed.
* Oversimplified, it reflects the count of allocated devices in the current test session.
*
* @see {Facade#init}
* @see {Facade#installWorker}
*/
workersCount: number;
}>;
type RuntimeConfig = Readonly<{
configurationName: string;
commands: Readonly<RuntimeCommandsGroup>[];
/**
* Dictionary of app configurations,
* where the keys are defined by {@link Detox.DetoxAppConfig#name}
* or equal to "default" if the name is not configured.
*/
apps: Record<string, Readonly<Detox.DetoxAppConfig>>;
artifacts: Readonly<RuntimeArtifactsConfig>;
behavior: Readonly<Detox.DetoxBehaviorConfig>;
cli: Readonly<CLIConfig>;
device: Readonly<Detox.DetoxDeviceConfig>;
logger: Readonly<Detox.DetoxLoggerConfig>;
testRunner: Readonly<Detox.DetoxTestRunnerConfig>;
session: Readonly<Detox.DetoxSessionConfig>;
}>;
type RuntimeArtifactsConfig = {
rootDir: string;
pathBuilder: string;
plugins: Readonly<{
log: Readonly<Detox.DetoxLogArtifactsPluginConfig>;
screenshot: Readonly<Detox.DetoxScreenshotArtifactsPluginConfig>;
video: Readonly<Detox.DetoxVideoArtifactsPluginConfig>;
instruments: Readonly<Detox.DetoxInstrumentsArtifactsPluginConfig>;
uiHierarchy: Readonly<Detox.DetoxUIHierarchyArtifactsPluginConfig>;
[pluginId: string]: unknown;
}>;
};
type RuntimeCommandsGroup = {
appName?: string;
build?: string;
start?: string;
};
type CLIConfig = Readonly<Partial<{
appLaunchArgs: string;
artifactsLocation: string;
captureViewHierarchy: string;
cleanup: boolean;
configPath: string;
configuration: string;
debugSynchronization: number;
deviceBootArgs: string;
deviceName: string;
forceAdbInstall: boolean;
gpu: string;
inspectBrk: boolean;
headless: boolean;
jestReportSpecs: boolean;
keepLockFile: boolean;
loglevel: string;
readonlyEmu: boolean;
recordLogs: string;
recordPerformance: string;
recordVideos: string;
retries: number;
reuse: string;
takeScreenshots: string;
useCustomLogger: string;
}>>;
}
}
declare const detox: DetoxInternals.Facade;
export = detox;