mock-interceptor.d.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { IncomingHttpHeaders } from './header'
  2. import Dispatcher from './dispatcher';
  3. import { BodyInit, Headers } from './fetch'
  4. export {
  5. Interceptable,
  6. MockInterceptor,
  7. MockScope
  8. }
  9. /** The scope associated with a mock dispatch. */
  10. declare class MockScope<TData extends object = object> {
  11. constructor(mockDispatch: MockInterceptor.MockDispatch<TData>);
  12. /** Delay a reply by a set amount of time in ms. */
  13. delay(waitInMs: number): MockScope<TData>;
  14. /** Persist the defined mock data for the associated reply. It will return the defined mock data indefinitely. */
  15. persist(): MockScope<TData>;
  16. /** Define a reply for a set amount of matching requests. */
  17. times(repeatTimes: number): MockScope<TData>;
  18. }
  19. /** The interceptor for a Mock. */
  20. declare class MockInterceptor {
  21. constructor(options: MockInterceptor.Options, mockDispatches: MockInterceptor.MockDispatch[]);
  22. /** Mock an undici request with the defined reply. */
  23. reply<TData extends object = object>(replyOptionsCallback: MockInterceptor.MockReplyOptionsCallback<TData>): MockScope<TData>;
  24. reply<TData extends object = object>(
  25. statusCode: number,
  26. data?: TData | Buffer | string | MockInterceptor.MockResponseDataHandler<TData>,
  27. responseOptions?: MockInterceptor.MockResponseOptions
  28. ): MockScope<TData>;
  29. /** Mock an undici request by throwing the defined reply error. */
  30. replyWithError<TError extends Error = Error>(error: TError): MockScope;
  31. /** Set default reply headers on the interceptor for subsequent mocked replies. */
  32. defaultReplyHeaders(headers: IncomingHttpHeaders): MockInterceptor;
  33. /** Set default reply trailers on the interceptor for subsequent mocked replies. */
  34. defaultReplyTrailers(trailers: Record<string, string>): MockInterceptor;
  35. /** Set automatically calculated content-length header on subsequent mocked replies. */
  36. replyContentLength(): MockInterceptor;
  37. }
  38. declare namespace MockInterceptor {
  39. /** MockInterceptor options. */
  40. export interface Options {
  41. /** Path to intercept on. */
  42. path: string | RegExp | ((path: string) => boolean);
  43. /** Method to intercept on. Defaults to GET. */
  44. method?: string | RegExp | ((method: string) => boolean);
  45. /** Body to intercept on. */
  46. body?: string | RegExp | ((body: string) => boolean);
  47. /** Headers to intercept on. */
  48. headers?: Record<string, string | RegExp | ((body: string) => boolean)> | ((headers: Record<string, string>) => boolean);
  49. /** Query params to intercept on */
  50. query?: Record<string, any>;
  51. }
  52. export interface MockDispatch<TData extends object = object, TError extends Error = Error> extends Options {
  53. times: number | null;
  54. persist: boolean;
  55. consumed: boolean;
  56. data: MockDispatchData<TData, TError>;
  57. }
  58. export interface MockDispatchData<TData extends object = object, TError extends Error = Error> extends MockResponseOptions {
  59. error: TError | null;
  60. statusCode?: number;
  61. data?: TData | string;
  62. }
  63. export interface MockResponseOptions {
  64. headers?: IncomingHttpHeaders;
  65. trailers?: Record<string, string>;
  66. }
  67. export interface MockResponseCallbackOptions {
  68. path: string;
  69. origin: string;
  70. method: string;
  71. body?: BodyInit | Dispatcher.DispatchOptions['body'];
  72. headers: Headers | Record<string, string>;
  73. maxRedirections: number;
  74. }
  75. export type MockResponseDataHandler<TData extends object = object> = (
  76. opts: MockResponseCallbackOptions
  77. ) => TData | Buffer | string;
  78. export type MockReplyOptionsCallback<TData extends object = object> = (
  79. opts: MockResponseCallbackOptions
  80. ) => { statusCode: number, data?: TData | Buffer | string, responseOptions?: MockResponseOptions }
  81. }
  82. interface Interceptable extends Dispatcher {
  83. /** Intercepts any matching requests that use the same origin as this mock client. */
  84. intercept(options: MockInterceptor.Options): MockInterceptor;
  85. }