@ply-ct/ply
Version:
REST API Automated Testing
98 lines (97 loc) • 3.52 kB
TypeScript
/// <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;
}