UNPKG

@ply-ct/ply

Version:

REST API Automated Testing

98 lines (97 loc) 3.52 kB
/// <reference types="node" /> import { Values } from './values'; import { TestType, Test } from './test'; import { Result, Outcome } from './result'; import { Log } from './log'; import { Runtime } from './runtime'; import { RunOptions } from './options'; import { EventEmitter } from 'events'; export interface Tests<T extends Test> { [key: string]: T; } /** * A suite represents one ply requests file (.ply.yaml), one ply case file (.ply.ts), * or one flow file (.ply.flow); * * Suites cannot be nested. * * TODO: separate RequestSuite and CaseSuite (like FlowSuite) * instead of conditional logic in this class. */ export declare class Suite<T extends Test> { readonly name: string; readonly type: TestType; readonly path: string; readonly runtime: Runtime; readonly logger: Log; readonly start: number; readonly end: number; readonly className?: string | undefined; readonly outFile?: string | undefined; readonly tests: Tests<T>; emitter?: EventEmitter; skip: boolean; callingFlowPath?: string; /** * @param name suite name * @param type request|case|flow * @param path relative path from tests location (forward slashes) * @param runtime info * @param logger * @param start zero-based start line * @param end zero-based end line * @param className? className for decorated suites * @param outFile? outputFile for decorated suites (absolute) */ constructor(name: string, type: TestType, path: string, runtime: Runtime, logger: Log, start: number, end: number, className?: string | undefined, outFile?: string | undefined); add(test: T): void; get(name: string): T | undefined; all(): T[]; size(): number; [Symbol.iterator](): Generator<T, void, undefined>; get log(): Log; /** * Run one test, write actual result, and verify vs expected. * @param runNum iterating * @param instNum looping * @returns result indicating outcome */ run(name: string, values: Values, runOptions?: RunOptions, runNum?: number, instNum?: number): Promise<Result>; /** * Run specified tests, write actual results, and verify vs expected. * @returns result array indicating outcomes */ run(names: string[], values: Values, runOptions?: RunOptions, runNum?: number): Promise<Result[]>; /** * Run all tests, write actual results, and verify vs expected. * @returns result array indicating outcomes */ run(values: Values, runOptions?: RunOptions): Promise<Result[]>; /** * Tests within a suite are always run sequentially. * @param tests */ runTests(tests: T[], values: Values, runOptions?: RunOptions, runNum?: number, instNum?: number): Promise<Result[]>; emitSuiteStarted(): void; emitTest(test: T): void; emitSuiteFinished(): void; private declaredStartsWith; /** * Translates request/response bodies to objects and * adds to array. Also adds to values object for downstream access. * @param results * @param result */ private addResult; private getResponseMassagers; private handleResultRunOptions; logOutcome(test: Test, outcome: Outcome, runNum?: number, label?: string, values?: Values): void; /** * Use stack trace to find calling case info (if any) for request. */ private getCallingCaseInfo; /** * Always contains \n newlines. Includes trailing newline. */ private buildResultYaml; }