mentoss
Version:
A utility to mock fetch requests and responses.
177 lines (176 loc) • 7.46 kB
TypeScript
/**
* Represents a route that the server can respond to.
*/
export class Route {
/**
* Creates a new instance.
* @param {Object} options The route options.
* @param {RequestPattern} options.request The request to match.
* @param {ResponsePattern|undefined} options.response The response to return.
* @param {ResponseCreator} options.createResponse The response creator to call.
* @param {string} options.baseUrl The base URL for the server.
*/
constructor({ request, response, createResponse, baseUrl }: {
request: RequestPattern;
response: ResponsePattern | undefined;
createResponse: ResponseCreator;
baseUrl: string;
});
/**
* Checks if the route matches a request.
* @param {RequestPattern} request The request to check.
* @returns {boolean} `true` if the route matches, `false` if not.
*/
matches(request: RequestPattern): boolean;
/**
* Traces the details of the request to see why it doesn't match.
* @param {RequestPattern} request The request to check.
* @returns {{matches:boolean, messages:string[]}} The trace match result.
*/
traceMatches(request: RequestPattern): {
matches: boolean;
messages: string[];
};
/**
* Creates a Response object from a route's response pattern. If the body
* is an object then the response will be JSON; if the body is a string
* then the response will be text; otherwise the response will be bytes.
* @param {Request} request The request that was received.
* @param {typeof Response} PreferredResponse The Response constructor to use.
* @returns {Promise<Response>} The response to return.
*/
createResponse(request: Request, PreferredResponse: typeof Response): Promise<Response>;
/**
* Returns a string representation of the route.
* @returns {string} The string representation of the route.
*/
toString(): string;
#private;
}
/**
* Represents a server that can respond to requests from `fetch()`.
*/
export class MockServer {
/**
* Creates a new instance.
* @param {string} baseUrl The base URL for the server.
*/
constructor(baseUrl: string);
/**
* The base URL for the server.
* @type {string}
* @readonly
*/
readonly baseUrl: string;
/**
* Adds a new route to the server.
* @param {RequestPattern} request
* @param {ResponsePattern|ResponseCreator|number} response
*/
route(request: RequestPattern, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a POST request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
post(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a GET request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
get(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a PUT request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
put(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a DELETE request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
delete(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a PATCH request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
patch(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to a HEAD request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
head(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Adds a new route that responds to an OPTIONS request.
* @param {MethodlessRequestPattern|string} request The request to match.
* @param {ResponsePattern|ResponseCreator|number} response The response to return.
*/
options(request: MethodlessRequestPattern | string, response: ResponsePattern | ResponseCreator | number): void;
/**
* Generates a `Response` for the given `Request` if a route matches.
* @param {Request} request The request to respond to.
* @param {typeof Response} [PreferredResponse] The Response constructor to use.
* @returns {Promise<Response|undefined>} The response to return.
*/
receive(request: Request, PreferredResponse?: typeof Response): Promise<Response | undefined>;
/**
* Traces the details of the request to see why it doesn't match.
* @param {Request} request The request to check.
* @param {typeof Response} [PreferredResponse] The Response constructor to use.
* @returns {Promise<{response:Response|undefined,traces: Array<Trace>}>} The trace match result.
*/
traceReceive(request: Request, PreferredResponse?: typeof Response): Promise<{
response: Response | undefined;
traces: Array<Trace>;
}>;
/**
* Determines if a route has been called.
* @param {RequestPattern|string} request The request pattern to check.
* @returns {boolean} `true` if the route was called, `false` if not.
*/
called(request: RequestPattern | string): boolean;
/**
* Returns the routes that have not been called.
* @returns {string[]} The unmatched routes.
*/
get uncalledRoutes(): string[];
/**
* Determines if all routes have been called.
* @returns {boolean} `true` if all routes have been called, `false` if not.
*/
allRoutesCalled(): boolean;
/**
* Clears all routes and history from the server.
* @returns {void}
*/
clear(): void;
/**
* Asserts that all routes have been called.
* @returns {void}
* @throws {Error} If any routes have not been called.
*/
assertAllRoutesCalled(): void;
#private;
}
export type RequestPattern = import("./types.js").RequestPattern;
export type MethodlessRequestPattern = import("./types.js").MethodlessRequestPattern;
export type ResponsePattern = import("./types.js").ResponsePattern;
export type ResponseCreator = import("./types.js").ResponseCreator;
export type Trace = {
/**
* The route that was checked.
*/
title: string;
/**
* Whether the route matches the request.
*/
matches: boolean;
/**
* The messages explaining why the route doesn't match.
*/
messages: string[];
};