UNPKG

arrange-act-assert

Version:

The lightweight "Act-Arrange-Assert" oriented testing framework

125 lines (124 loc) 4.25 kB
import { ResolvablePromise } from "../utils/utils"; import { Formatter, Messages, TestInfo } from "../formatters"; import { SpawnTestFileOptions } from "../spawnTestFile/spawnTestFile"; type AssertSnapshotObject<ARR, ACT> = { [name: string]: (act: Awaited<ACT>, arrange: Awaited<ARR>, after: After) => unknown; }; export type After = <T>(data: T, cb: (data: T) => void) => T; export type DescribeCallback = (test: TestFunction, after: After) => unknown; export type TestInterface<ARR, ACT, ASS> = { ARRANGE?(after: After): ARR; ACT?(arrange: Awaited<ARR>, after: After): ACT; ASSERT?(act: Awaited<ACT>, arrange: Awaited<ARR>, after: After): ASS; ASSERTS?: AssertSnapshotObject<ARR, ACT>; SNAPSHOTS?: AssertSnapshotObject<ARR, ACT>; } | { ARRANGE?(after: After): ARR; SNAPSHOT?(arrange: Awaited<ARR>, after: After): ACT; ASSERT?(act: Awaited<ACT>, arrange: Awaited<ARR>, after: After): ASS; ASSERTS?: AssertSnapshotObject<ARR, ACT>; }; export type TestFunction = { <ARR, ACT, ASS>(description: string, testData: TestInterface<ARR, ACT, ASS>): Promise<void>; test: TestFunction; describe(description: string, cb: (test: TestFunction, after: After) => unknown): Promise<void>; after(cb: () => void): void; }; export type RunTestFileOptions = { clearModuleCache: boolean; }; export type SummaryResult = { count: number; ok: number; error: number; }; export type Summary = { test: SummaryResult; assert: SummaryResult; describe: SummaryResult; total: SummaryResult; failed: { fileId: string; id: number; test: TestInfo; error: string; }[]; }; export type TestOptions = { snapshotsFolder?: string; confirmSnapshots?: boolean; reviewSnapshots?: boolean; regenerateSnapshots?: boolean; coverage?: boolean; coverageExclude?: RegExp[]; coverageNoBranches?: boolean; coverageNoSourceMaps?: boolean; }; export type { Test }; type FullTestOptions = { description: string; descriptionPath: string[]; } & Required<TestOptions>; type TestContext = { send: (msg: Messages) => void; readFile(path: string): Promise<Buffer>; writeFile(path: string, data: Buffer): Promise<void>; }; declare class Test<ARR = any, ACT = any, ASS = any> { private _context; private _options; readonly data?: (TestInterface<ARR, ACT, ASS> | DescribeCallback) | undefined; private _promise; private _pendingPromise; private _tests; private _pending; private _finished; private _ended; private _afters; private _afterTest; private _testErrors; readonly id: number; private _addAfter; constructor(_context: TestContext, _options: FullTestOptions, data?: (TestInterface<ARR, ACT, ASS> | DescribeCallback) | undefined); run(): Promise<void>; end(): Promise<void>; private _isDescribe; private _getAsserts; private _getSnapshots; describe(description: string, cb: DescribeCallback): ResolvablePromise; test<ARR, ASS, ACT>(description: string, testData: TestInterface<ARR, ASS, ACT>): ResolvablePromise; after(cb: () => void): void; private _add; private _runPending; private _awaitSubtests; private _runDescribe; private _checkSnapshot; private _runAssert; private _runSnapshot; private _runTest; private _runAfters; private _runAfterTests; } declare class Root extends Test { readonly notifyParentProcess: ((msg: { type: "testRunner"; data: Messages; }) => void) | null; formatter: Formatter | null; readonly summary: Summary; private _summaryMap; constructor(notifyParentProcess: ((msg: { type: "testRunner"; data: Messages; }) => void) | null, options?: TestOptions); processMessage(fileId: string, msg: Messages): void; setFormatter(formatter: Formatter): void; runTestFile(file: string, options: RunTestFileOptions): any; spawnTestFile(file: string, options: SpawnTestFileOptions): Promise<void>; } export declare function isMessage(msg: unknown): msg is { data: Messages; }; export declare function newRoot(options?: TestOptions): Root; declare const _default: TestFunction; export default _default;