From 07cc99edac499755f91fa55d6297e04742e84780 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 30 Apr 2020 00:14:56 +0200 Subject: [PATCH] fix(jest): use @jest/globals package --- types/jest/index.d.ts | 1366 +-------------------------------------- types/jest/package.json | 3 +- 2 files changed, 17 insertions(+), 1352 deletions(-) diff --git a/types/jest/index.d.ts b/types/jest/index.d.ts index 0970a208ac52beb..959239c921e3bf1 100644 --- a/types/jest/index.d.ts +++ b/types/jest/index.d.ts @@ -31,1356 +31,22 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // Minimum TypeScript Version: 3.8 -declare var beforeAll: jest.Lifecycle; -declare var beforeEach: jest.Lifecycle; -declare var afterAll: jest.Lifecycle; -declare var afterEach: jest.Lifecycle; -declare var describe: jest.Describe; -declare var fdescribe: jest.Describe; -declare var xdescribe: jest.Describe; -declare var it: jest.It; -declare var fit: jest.It; -declare var xit: jest.It; -declare var test: jest.It; -declare var xtest: jest.It; - -declare const expect: jest.Expect; - -type ExtractEachCallbackArgs> = { - 1: [T[0]], - 2: [T[0], T[1]], - 3: [T[0], T[1], T[2]], - 4: [T[0], T[1], T[2], T[3]], - 5: [T[0], T[1], T[2], T[3], T[4]], - 6: [T[0], T[1], T[2], T[3], T[4], T[5]], - 7: [T[0], T[1], T[2], T[3], T[4], T[5], T[6]], - 8: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7]], - 9: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8]], - 10: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9]], - 'fallback': Array<(T extends ReadonlyArray? U: any)> -}[ - T extends Readonly<[any]> ? 1 - : T extends Readonly<[any, any]> ? 2 - : T extends Readonly<[any, any, any]> ? 3 - : T extends Readonly<[any, any, any, any]> ? 4 - : T extends Readonly<[any, any, any, any, any]> ? 5 - : T extends Readonly<[any, any, any, any, any, any]> ? 6 - : T extends Readonly<[any, any, any, any, any, any, any]> ? 7 - : T extends Readonly<[any, any, any, any, any, any, any, any]> ? 8 - : T extends Readonly<[any, any, any, any, any, any, any, any, any]> ? 9 - : T extends Readonly<[any, any, any, any, any, any, any, any, any, any]> ? 10 - : 'fallback' -]; - -declare namespace jest { - /** - * Disables automatic mocking in the module loader. - */ - function autoMockOff(): typeof jest; - /** - * Enables automatic mocking in the module loader. - */ - function autoMockOn(): typeof jest; - /** - * Clears the mock.calls and mock.instances properties of all mocks. - * Equivalent to calling .mockClear() on every mocked function. - */ - function clearAllMocks(): typeof jest; - /** - * Use the automatic mocking system to generate a mocked version of the given module. - */ - // tslint:disable-next-line: no-unnecessary-generics - function createMockFromModule(moduleName: string): T; - /** - * Resets the state of all mocks. - * Equivalent to calling .mockReset() on every mocked function. - */ - function resetAllMocks(): typeof jest; - /** - * available since Jest 21.1.0 - * Restores all mocks back to their original value. - * Equivalent to calling .mockRestore on every mocked function. - * Beware that jest.restoreAllMocks() only works when mock was created with - * jest.spyOn; other mocks will require you to manually restore them. - */ - function restoreAllMocks(): typeof jest; - /** - * Removes any pending timers from the timer system. If any timers have - * been scheduled, they will be cleared and will never have the opportunity - * to execute in the future. - */ - function clearAllTimers(): typeof jest; - /** - * Returns the number of fake timers still left to run. - */ - function getTimerCount(): number; - /** - * Set the current system time used by fake timers. Simulates a user - * changing the system clock while your program is running. It affects the - * current time but it does not in itself cause e.g. timers to fire; they - * will fire exactly as they would have done without the call to - * jest.setSystemTime(). - * - * > Note: This function is only available when using modern fake timers - * > implementation - */ - function setSystemTime(now?: number | Date): void; - /** - * When mocking time, Date.now() will also be mocked. If you for some - * reason need access to the real current time, you can invoke this - * function. - * - * > Note: This function is only available when using modern fake timers - * > implementation - */ - function getRealSystemTime(): number; - /** - * Indicates that the module system should never return a mocked version - * of the specified module, including all of the specificied module's dependencies. - */ - function deepUnmock(moduleName: string): typeof jest; - /** - * Disables automatic mocking in the module loader. - */ - function disableAutomock(): typeof jest; - /** - * Mocks a module with an auto-mocked version when it is being required. - */ - function doMock(moduleName: string, factory?: () => unknown, options?: MockOptions): typeof jest; - /** - * Indicates that the module system should never return a mocked version - * of the specified module from require() (e.g. that it should always return the real module). - */ - function dontMock(moduleName: string): typeof jest; - /** - * Enables automatic mocking in the module loader. - */ - function enableAutomock(): typeof jest; - /** - * Creates a mock function. Optionally takes a mock implementation. - */ - function fn(): Mock; - /** - * Creates a mock function. Optionally takes a mock implementation. - */ - function fn(implementation?: (...args: Y) => T): Mock; - /** - * (renamed to `createMockFromModule` in Jest 26.0.0+) - * Use the automatic mocking system to generate a mocked version of the given module. - */ - // tslint:disable-next-line: no-unnecessary-generics - function genMockFromModule(moduleName: string): T; - /** - * Returns whether the given function is a mock function. - */ - function isMockFunction(fn: any): fn is Mock; - /** - * Mocks a module with an auto-mocked version when it is being required. - */ - function mock(moduleName: string, factory?: () => unknown, options?: MockOptions): typeof jest; - - /** - * The mocked test helper provides typings on your mocked modules and even - * their deep methods, based on the typing of its source. It makes use of - * the latest TypeScript feature, so you even have argument types - * completion in the IDE (as opposed to jest.MockInstance). - * - * Note: while it needs to be a function so that input type is changed, the helper itself does nothing else than returning the given input value. - */ - function mocked(item: T, deep?: false): MaybeMocked; - /** - * The mocked test helper provides typings on your mocked modules and even - * their deep methods, based on the typing of its source. It makes use of - * the latest TypeScript feature, so you even have argument types - * completion in the IDE (as opposed to jest.MockInstance). - * - * Note: while it needs to be a function so that input type is changed, the helper itself does nothing else than returning the given input value. - */ - function mocked(item: T, deep: true): MaybeMockedDeep; - /** - * Returns the actual module instead of a mock, bypassing all checks on - * whether the module should receive a mock implementation or not. - */ - // tslint:disable-next-line: no-unnecessary-generics - function requireActual(moduleName: string): TModule; - /** - * Returns a mock module instead of the actual module, bypassing all checks - * on whether the module should be required normally or not. - */ - // tslint:disable-next-line: no-unnecessary-generics - function requireMock(moduleName: string): TModule; - /** - * Resets the module registry - the cache of all required modules. This is - * useful to isolate modules where local state might conflict between tests. - */ - function resetModules(): typeof jest; - /** - * Creates a sandbox registry for the modules that are loaded inside the callback function.. - * This is useful to isolate specific modules for every test so that local module state doesn't conflict between tests. - */ - function isolateModules(fn: () => void): typeof jest; - /** - * Runs failed tests n-times until they pass or until the max number of retries is exhausted. - * This only works with jest-circus! - */ - function retryTimes(numRetries: number): typeof jest; - /** - * Exhausts tasks queued by setImmediate(). - * > Note: This function is only available when using modern fake timers - * > implementation - */ - function runAllImmediates(): typeof jest; - /** - * Exhausts the micro-task queue (usually interfaced in node via process.nextTick). - */ - function runAllTicks(): typeof jest; - /** - * Exhausts both the macro-task queue (i.e., all tasks queued by setTimeout(), - * setInterval(), and setImmediate()) and the micro-task queue (usually interfaced - * in node via process.nextTick). - */ - function runAllTimers(): typeof jest; - /** - * Executes only the macro-tasks that are currently pending (i.e., only the - * tasks that have been queued by setTimeout() or setInterval() up to this point). - * If any of the currently pending macro-tasks schedule new macro-tasks, - * those new tasks will not be executed by this call. - */ - function runOnlyPendingTimers(): typeof jest; - /** - * Advances all timers by msToRun milliseconds. All pending "macro-tasks" that have been - * queued via setTimeout() or setInterval(), and would be executed within this timeframe - * will be executed. - */ - function advanceTimersByTime(msToRun: number): typeof jest; - /** - * Advances all timers by the needed milliseconds so that only the next - * timeouts/intervals will run. Optionally, you can provide steps, so it - * will run steps amount of next timeouts/intervals. - */ - function advanceTimersToNextTimer(step?: number): void; - /** - * Explicitly supplies the mock object that the module system should return - * for the specified module. - */ - // tslint:disable-next-line: no-unnecessary-generics - function setMock(moduleName: string, moduleExports: T): typeof jest; - /** - * Set the default timeout interval for tests and before/after hooks in milliseconds. - * Note: The default timeout interval is 5 seconds if this method is not called. - */ - function setTimeout(timeout: number): typeof jest; - /** - * Creates a mock function similar to jest.fn but also tracks calls to `object[methodName]` - * - * Note: By default, jest.spyOn also calls the spied method. This is different behavior from most - * other test libraries. - * - * @example - * - * const video = require('./video'); - * - * test('plays video', () => { - * const spy = jest.spyOn(video, 'play'); - * const isPlaying = video.play(); - * - * expect(spy).toHaveBeenCalled(); - * expect(isPlaying).toBe(true); - * - * spy.mockReset(); - * spy.mockRestore(); - * }); - */ - function spyOn>>( - object: T, - method: M, - accessType: 'get' - ): SpyInstance[M], []>; - function spyOn>>( - object: T, - method: M, - accessType: 'set' - ): SpyInstance[M]]>; - function spyOn>>( - object: T, - method: M - ): Required[M] extends (...args: any[]) => any - ? SpyInstance[M]>, ArgsType[M]>> - : never; - function spyOn>>( - object: T, - method: M - ): Required[M] extends new (...args: any[]) => any - ? SpyInstance[M]>, ConstructorArgsType[M]>> - : never; - /** - * Indicates that the module system should never return a mocked version of - * the specified module from require() (e.g. that it should always return the real module). - */ - function unmock(moduleName: string): typeof jest; - /** - * Instructs Jest to use fake versions of the standard timer functions. - */ - function useFakeTimers(implementation?: 'modern' | 'legacy'): typeof jest; - /** - * Instructs Jest to use the real versions of the standard timer functions. - */ - function useRealTimers(): typeof jest; - - interface MockOptions { - virtual?: boolean | undefined; - } - - type MockableFunction = (...args: any[]) => any; - type MethodKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? K : never }[keyof T]; - type PropertyKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? never : K }[keyof T]; - type ArgumentsOf = T extends (...args: infer A) => any ? A : never; - type ConstructorArgumentsOf = T extends new (...args: infer A) => any ? A : never; - - interface MockWithArgs extends MockInstance, ArgumentsOf> { - new (...args: ConstructorArgumentsOf): T; - (...args: ArgumentsOf): ReturnType; - } - type MaybeMockedConstructor = T extends new (...args: any[]) => infer R - ? MockInstance> - : T; - type MockedFn = MockWithArgs & { [K in keyof T]: T[K] }; - type MockedFunctionDeep = MockWithArgs & MockedObjectDeep; - type MockedObject = MaybeMockedConstructor & { - [K in MethodKeysOf]: T[K] extends MockableFunction ? MockedFn : T[K]; - } & { [K in PropertyKeysOf]: T[K] }; - type MockedObjectDeep = MaybeMockedConstructor & { - [K in MethodKeysOf]: T[K] extends MockableFunction ? MockedFunctionDeep : T[K]; - } & { [K in PropertyKeysOf]: MaybeMockedDeep }; - type MaybeMockedDeep = T extends MockableFunction - ? MockedFunctionDeep - : T extends object // eslint-disable-line @typescript-eslint/ban-types - ? MockedObjectDeep - : T; - // eslint-disable-next-line @typescript-eslint/ban-types - type MaybeMocked = T extends MockableFunction ? MockedFn : T extends object ? MockedObject : T; - type EmptyFunction = () => void; - type ArgsType = T extends (...args: infer A) => any ? A : never; - type ConstructorArgsType = T extends new (...args: infer A) => any ? A : never; - type RejectedValue = T extends PromiseLike ? any : never; - type ResolvedValue = T extends PromiseLike ? U | T : never; - // see https://github.com/Microsoft/TypeScript/issues/25215 - type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends (...args: any[]) => any ? never : K }[keyof T] & - string; - type FunctionPropertyNames = { [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never }[keyof T] & - string; - type ConstructorPropertyNames = { [K in keyof T]: T[K] extends new (...args: any[]) => any ? K : never }[keyof T] & - string; - - interface DoneCallback { - (...args: any[]): any; - fail(error?: string | { message: string }): any; - } - - type ProvidesCallback = ((cb: DoneCallback) => void | undefined) | (() => Promise); - type ProvidesHookCallback = (() => any) | ProvidesCallback; - - type Lifecycle = (fn: ProvidesHookCallback, timeout?: number) => any; - - interface FunctionLike { - readonly name: string; - } - - interface Each { - // Exclusively arrays. - (cases: ReadonlyArray): (name: string, fn: (...args: T) => any, timeout?: number) => void; - >(cases: ReadonlyArray): (name: string, fn: (...args: ExtractEachCallbackArgs) => any, timeout?: number) => void; - // Not arrays. - (cases: ReadonlyArray): (name: string, fn: (...args: T[]) => any, timeout?: number) => void; - (cases: ReadonlyArray>): ( - name: string, - fn: (...args: any[]) => any, - timeout?: number - ) => void; - (strings: TemplateStringsArray, ...placeholders: any[]): ( - name: string, - fn: (arg: any) => any, - timeout?: number - ) => void; - } - - /** - * Creates a test closure - */ - interface It { - /** - * Creates a test closure. - * - * @param name The name of your test - * @param fn The function for your test - * @param timeout The timeout for an async function test - */ - (name: string, fn?: ProvidesCallback, timeout?: number): void; - /** - * Only runs this test in the current file. - */ - only: It; - /** - * Skips running this test in the current file. - */ - skip: It; - /** - * Sketch out which tests to write in the future. - */ - todo: It; - /** - * Experimental and should be avoided. - */ - concurrent: It; - /** - * Use if you keep duplicating the same test with different data. `.each` allows you to write the - * test once and pass data in. - * - * `.each` is available with two APIs: - * - * #### 1 `test.each(table)(name, fn)` - * - * - `table`: Array of Arrays with the arguments that are passed into the test fn for each row. - * - `name`: String the title of the test block. - * - `fn`: Function the test to be ran, this is the function that will receive the parameters in each row as function arguments. - * - * - * #### 2 `test.each table(name, fn)` - * - * - `table`: Tagged Template Literal - * - `name`: String the title of the test, use `$variable` to inject test data into the test title from the tagged template expressions. - * - `fn`: Function the test to be ran, this is the function that will receive the test data object.. - * - * @example - * - * // API 1 - * test.each([[1, 1, 2], [1, 2, 3], [2, 1, 3]])( - * '.add(%i, %i)', - * (a, b, expected) => { - * expect(a + b).toBe(expected); - * }, - * ); - * - * // API 2 - * test.each` - * a | b | expected - * ${1} | ${1} | ${2} - * ${1} | ${2} | ${3} - * ${2} | ${1} | ${3} - * `('returns $expected when $a is added $b', ({a, b, expected}) => { - * expect(a + b).toBe(expected); - * }); - * - */ - each: Each; - } - - interface Describe { - // tslint:disable-next-line ban-types - (name: number | string | Function | FunctionLike, fn: EmptyFunction): void; - /** Only runs the tests inside this `describe` for the current file */ - only: Describe; - /** Skips running the tests inside this `describe` for the current file */ - skip: Describe; - each: Each; - } - - type PrintLabel = (string: string) => string; - - type MatcherHintColor = (arg: string) => string; - - interface MatcherHintOptions { - comment?: string | undefined; - expectedColor?: MatcherHintColor | undefined; - isDirectExpectCall?: boolean | undefined; - isNot?: boolean | undefined; - promise?: string | undefined; - receivedColor?: MatcherHintColor | undefined; - secondArgument?: string | undefined; - secondArgumentColor?: MatcherHintColor | undefined; - } - - interface ChalkFunction { - (text: TemplateStringsArray, ...placeholders: any[]): string; - (...text: any[]): string; - } - - interface ChalkColorSupport { - level: 0 | 1 | 2 | 3; - hasBasic: boolean; - has256: boolean; - has16m: boolean; - } - - type MatcherColorFn = ChalkFunction & { supportsColor: ChalkColorSupport }; - - type EqualityTester = (a: any, b: any) => boolean | undefined; - - interface MatcherUtils { - readonly isNot: boolean; - readonly dontThrow: () => void; - readonly promise: string; - readonly assertionCalls: number; - readonly expectedAssertionsNumber: number | null; - readonly isExpectingAssertions: boolean; - readonly suppressedErrors: any[]; - readonly expand: boolean; - readonly testPath: string; - readonly currentTestName: string; - utils: { - readonly EXPECTED_COLOR: MatcherColorFn; - readonly RECEIVED_COLOR: MatcherColorFn; - readonly INVERTED_COLOR: MatcherColorFn; - readonly BOLD_WEIGHT: MatcherColorFn; - readonly DIM_COLOR: MatcherColorFn; - readonly SUGGEST_TO_CONTAIN_EQUAL: string; - diff(a: any, b: any, options?: import("jest-diff").DiffOptions): string | null; - ensureActualIsNumber(actual: any, matcherName: string, options?: MatcherHintOptions): void; - ensureExpectedIsNumber(actual: any, matcherName: string, options?: MatcherHintOptions): void; - ensureNoExpected(actual: any, matcherName: string, options?: MatcherHintOptions): void; - ensureNumbers(actual: any, expected: any, matcherName: string, options?: MatcherHintOptions): void; - ensureExpectedIsNonNegativeInteger(expected: any, matcherName: string, options?: MatcherHintOptions): void; - matcherHint( - matcherName: string, - received?: string, - expected?: string, - options?: MatcherHintOptions - ): string; - matcherErrorMessage( - hint: string, - generic: string, - specific: string - ): string; - pluralize(word: string, count: number): string; - printReceived(object: any): string; - printExpected(value: any): string; - printWithType(name: string, value: any, print: (value: any) => string): string; - stringify(object: {}, maxDepth?: number): string; - highlightTrailingWhitespace(text: string): string; - - printDiffOrStringify(expected: any, received: any, expectedLabel: string, receivedLabel: string, expand: boolean): string; - - getLabelPrinter(...strings: string[]): PrintLabel; - - iterableEquality: EqualityTester; - subsetEquality: EqualityTester; - }; - /** - * This is a deep-equality function that will return true if two objects have the same values (recursively). - */ - equals(a: any, b: any, customTesters?: EqualityTester[], strictCheck?: boolean): boolean; - [other: string]: any; - } - - interface ExpectExtendMap { - [key: string]: CustomMatcher; - } - - type MatcherContext = MatcherUtils & Readonly; - type CustomMatcher = ( - this: MatcherContext, - received: any, - ...actual: any[] - ) => CustomMatcherResult | Promise; - - interface CustomMatcherResult { - pass: boolean; - message: () => string; - } - - type SnapshotSerializerPlugin = import('pretty-format').Plugin; - - interface InverseAsymmetricMatchers { - /** - * `expect.not.arrayContaining(array)` matches a received array which - * does not contain all of the elements in the expected array. That is, - * the expected array is not a subset of the received array. It is the - * inverse of `expect.arrayContaining`. - * - * Optionally, you can provide a type for the elements via a generic. - */ - // tslint:disable-next-line: no-unnecessary-generics - arrayContaining(arr: E[]): any; - /** - * `expect.not.objectContaining(object)` matches any received object - * that does not recursively match the expected properties. That is, the - * expected object is not a subset of the received object. Therefore, - * it matches a received object which contains properties that are not - * in the expected object. It is the inverse of `expect.objectContaining`. - * - * Optionally, you can provide a type for the object via a generic. - * This ensures that the object contains the desired structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - objectContaining(obj: E): any; - /** - * `expect.not.stringMatching(string | regexp)` matches the received - * string that does not match the expected regexp. It is the inverse of - * `expect.stringMatching`. - */ - stringMatching(str: string | RegExp): any; - /** - * `expect.not.stringContaining(string)` matches the received string - * that does not contain the exact expected string. It is the inverse of - * `expect.stringContaining`. - */ - stringContaining(str: string): any; - } - interface MatcherState { - assertionCalls: number; - currentTestName: string; - expand: boolean; - expectedAssertionsNumber: number; - isExpectingAssertions?: boolean | undefined; - suppressedErrors: Error[]; - testPath: string; - } - /** - * The `expect` function is used every time you want to test a value. - * You will rarely call `expect` by itself. - */ - interface Expect { - /** - * The `expect` function is used every time you want to test a value. - * You will rarely call `expect` by itself. - * - * @param actual The value to apply matchers against. - */ - (actual: T): JestMatchers; - /** - * Matches anything but null or undefined. You can use it inside `toEqual` or `toBeCalledWith` instead - * of a literal value. For example, if you want to check that a mock function is called with a - * non-null argument: - * - * @example - * - * test('map calls its argument with a non-null argument', () => { - * const mock = jest.fn(); - * [1].map(x => mock(x)); - * expect(mock).toBeCalledWith(expect.anything()); - * }); - * - */ - anything(): any; - /** - * Matches anything that was created with the given constructor. - * You can use it inside `toEqual` or `toBeCalledWith` instead of a literal value. - * - * @example - * - * function randocall(fn) { - * return fn(Math.floor(Math.random() * 6 + 1)); - * } - * - * test('randocall calls its callback with a number', () => { - * const mock = jest.fn(); - * randocall(mock); - * expect(mock).toBeCalledWith(expect.any(Number)); - * }); - */ - any(classType: any): any; - /** - * Matches any array made up entirely of elements in the provided array. - * You can use it inside `toEqual` or `toBeCalledWith` instead of a literal value. - * - * Optionally, you can provide a type for the elements via a generic. - */ - // tslint:disable-next-line: no-unnecessary-generics - arrayContaining(arr: E[]): any; - /** - * Verifies that a certain number of assertions are called during a test. - * This is often useful when testing asynchronous code, in order to - * make sure that assertions in a callback actually got called. - */ - assertions(num: number): void; - /** - * Verifies that at least one assertion is called during a test. - * This is often useful when testing asynchronous code, in order to - * make sure that assertions in a callback actually got called. - */ - hasAssertions(): void; - /** - * You can use `expect.extend` to add your own matchers to Jest. - */ - extend(obj: ExpectExtendMap): void; - /** - * Adds a module to format application-specific data structures for serialization. - */ - addSnapshotSerializer(serializer: SnapshotSerializerPlugin): void; - /** - * Matches any object that recursively matches the provided keys. - * This is often handy in conjunction with other asymmetric matchers. - * - * Optionally, you can provide a type for the object via a generic. - * This ensures that the object contains the desired structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - objectContaining(obj: E): any; - /** - * Matches any string that contains the exact provided string - */ - stringMatching(str: string | RegExp): any; - /** - * Matches any received string that contains the exact expected string - */ - stringContaining(str: string): any; - - not: InverseAsymmetricMatchers; - - setState(state: object): void; - getState(): MatcherState & Record; - } - - type JestMatchers = JestMatchersShape, Matchers, T>>; - - type JestMatchersShape = { - /** - * Use resolves to unwrap the value of a fulfilled promise so any other - * matcher can be chained. If the promise is rejected the assertion fails. - */ - resolves: AndNot, - /** - * Unwraps the reason of a rejected promise so any other matcher can be chained. - * If the promise is fulfilled the assertion fails. - */ - rejects: AndNot - } & AndNot; - type AndNot = T & { - not: T - }; - - // should be R extends void|Promise but getting dtslint error - interface Matchers { - /** - * Ensures the last call to a mock function was provided specific args. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - lastCalledWith(...args: E): R; - /** - * Ensure that the last call to a mock function has returned a specified value. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - lastReturnedWith(value: E): R; - /** - * Ensure that a mock function is called with specific arguments on an Nth call. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - nthCalledWith(nthCall: number, ...params: E): R; - /** - * Ensure that the nth call to a mock function has returned a specified value. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - nthReturnedWith(n: number, value: E): R; - /** - * Checks that a value is what you expect. It uses `Object.is` to check strict equality. - * Don't use `toBe` with floating-point numbers. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toBe(expected: E): R; - /** - * Ensures that a mock function is called. - */ - toBeCalled(): R; - /** - * Ensures that a mock function is called an exact number of times. - */ - toBeCalledTimes(expected: number): R; - /** - * Ensure that a mock function is called with specific arguments. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - toBeCalledWith(...args: E): R; - /** - * Using exact equality with floating point numbers is a bad idea. - * Rounding means that intuitive things fail. - * The default for numDigits is 2. - */ - toBeCloseTo(expected: number, numDigits?: number): R; - /** - * Ensure that a variable is not undefined. - */ - toBeDefined(): R; - /** - * When you don't care what a value is, you just want to - * ensure a value is false in a boolean context. - */ - toBeFalsy(): R; - /** - * For comparing floating point or big integer numbers. - */ - toBeGreaterThan(expected: number | bigint): R; - /** - * For comparing floating point or big integer numbers. - */ - toBeGreaterThanOrEqual(expected: number | bigint): R; - /** - * Ensure that an object is an instance of a class. - * This matcher uses `instanceof` underneath. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toBeInstanceOf(expected: E): R; - /** - * For comparing floating point or big integer numbers. - */ - toBeLessThan(expected: number | bigint): R; - /** - * For comparing floating point or big integer numbers. - */ - toBeLessThanOrEqual(expected: number | bigint): R; - /** - * This is the same as `.toBe(null)` but the error messages are a bit nicer. - * So use `.toBeNull()` when you want to check that something is null. - */ - toBeNull(): R; - /** - * Use when you don't care what a value is, you just want to ensure a value - * is true in a boolean context. In JavaScript, there are six falsy values: - * `false`, `0`, `''`, `null`, `undefined`, and `NaN`. Everything else is truthy. - */ - toBeTruthy(): R; - /** - * Used to check that a variable is undefined. - */ - toBeUndefined(): R; - /** - * Used to check that a variable is NaN. - */ - toBeNaN(): R; - /** - * Used when you want to check that an item is in a list. - * For testing the items in the list, this uses `===`, a strict equality check. - * It can also check whether a string is a substring of another string. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toContain(expected: E): R; - /** - * Used when you want to check that an item is in a list. - * For testing the items in the list, this matcher recursively checks the - * equality of all fields, rather than checking for object identity. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toContainEqual(expected: E): R; - /** - * Used when you want to check that two objects have the same value. - * This matcher recursively checks the equality of all fields, rather than checking for object identity. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toEqual(expected: E): R; - /** - * Ensures that a mock function is called. - */ - toHaveBeenCalled(): R; - /** - * Ensures that a mock function is called an exact number of times. - */ - toHaveBeenCalledTimes(expected: number): R; - /** - * Ensure that a mock function is called with specific arguments. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveBeenCalledWith(...params: E): R; - /** - * Ensure that a mock function is called with specific arguments on an Nth call. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveBeenNthCalledWith(nthCall: number, ...params: E): R; - /** - * If you have a mock function, you can use `.toHaveBeenLastCalledWith` - * to test what arguments it was last called with. - * - * Optionally, you can provide a type for the expected arguments via a generic. - * Note that the type must be either an array or a tuple. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveBeenLastCalledWith(...params: E): R; - /** - * Use to test the specific value that a mock function last returned. - * If the last call to the mock function threw an error, then this matcher will fail - * no matter what value you provided as the expected return value. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveLastReturnedWith(expected: E): R; - /** - * Used to check that an object has a `.length` property - * and it is set to a certain numeric value. - */ - toHaveLength(expected: number): R; - /** - * Use to test the specific value that a mock function returned for the nth call. - * If the nth call to the mock function threw an error, then this matcher will fail - * no matter what value you provided as the expected return value. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveNthReturnedWith(nthCall: number, expected: E): R; - /** - * Use to check if property at provided reference keyPath exists for an object. - * For checking deeply nested properties in an object you may use dot notation or an array containing - * the keyPath for deep references. - * - * Optionally, you can provide a value to check if it's equal to the value present at keyPath - * on the target object. This matcher uses 'deep equality' (like `toEqual()`) and recursively checks - * the equality of all fields. - * - * @example - * - * expect(houseForSale).toHaveProperty('kitchen.area', 20); - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveProperty(propertyPath: string | any[], value?: E): R; - /** - * Use to test that the mock function successfully returned (i.e., did not throw an error) at least one time - */ - toHaveReturned(): R; - /** - * Use to ensure that a mock function returned successfully (i.e., did not throw an error) an exact number of times. - * Any calls to the mock function that throw an error are not counted toward the number of times the function returned. - */ - toHaveReturnedTimes(expected: number): R; - /** - * Use to ensure that a mock function returned a specific value. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toHaveReturnedWith(expected: E): R; - /** - * Check that a string matches a regular expression. - */ - toMatch(expected: string | RegExp): R; - /** - * Used to check that a JavaScript object matches a subset of the properties of an object - * - * Optionally, you can provide an object to use as Generic type for the expected value. - * This ensures that the matching object matches the structure of the provided object-like type. - * - * @example - * - * type House = { - * bath: boolean; - * bedrooms: number; - * kitchen: { - * amenities: string[]; - * area: number; - * wallColor: string; - * } - * }; - * - * expect(desiredHouse).toMatchObject({...standardHouse, kitchen: {area: 20}}) // wherein standardHouse is some base object of type House - */ - // tslint:disable-next-line: no-unnecessary-generics - toMatchObject(expected: E): R; - /** - * This ensures that a value matches the most recent snapshot with property matchers. - * Check out [the Snapshot Testing guide](http://facebook.github.io/jest/docs/snapshot-testing.html) for more information. - */ - // tslint:disable-next-line: no-unnecessary-generics - toMatchSnapshot(propertyMatchers: Partial, snapshotName?: string): R; - /** - * This ensures that a value matches the most recent snapshot. - * Check out [the Snapshot Testing guide](http://facebook.github.io/jest/docs/snapshot-testing.html) for more information. - */ - toMatchSnapshot(snapshotName?: string): R; - /** - * This ensures that a value matches the most recent snapshot with property matchers. - * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. - * Check out [the Snapshot Testing guide](http://facebook.github.io/jest/docs/snapshot-testing.html) for more information. - */ - // tslint:disable-next-line: no-unnecessary-generics - toMatchInlineSnapshot(propertyMatchers: Partial, snapshot?: string): R; - /** - * This ensures that a value matches the most recent snapshot with property matchers. - * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. - * Check out [the Snapshot Testing guide](http://facebook.github.io/jest/docs/snapshot-testing.html) for more information. - */ - toMatchInlineSnapshot(snapshot?: string): R; - /** - * Ensure that a mock function has returned (as opposed to thrown) at least once. - */ - toReturn(): R; - /** - * Ensure that a mock function has returned (as opposed to thrown) a specified number of times. - */ - toReturnTimes(count: number): R; - /** - * Ensure that a mock function has returned a specified value at least once. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toReturnWith(value: E): R; - /** - * Use to test that objects have the same types as well as structure. - * - * Optionally, you can provide a type for the expected value via a generic. - * This is particularly useful for ensuring expected objects have the right structure. - */ - // tslint:disable-next-line: no-unnecessary-generics - toStrictEqual(expected: E): R; - /** - * Used to test that a function throws when it is called. - */ - toThrow(error?: string | Constructable | RegExp | Error): R; - /** - * If you want to test that a specific error is thrown inside a function. - */ - toThrowError(error?: string | Constructable | RegExp | Error): R; - /** - * Used to test that a function throws a error matching the most recent snapshot when it is called. - */ - toThrowErrorMatchingSnapshot(snapshotName?: string): R; - /** - * Used to test that a function throws a error matching the most recent snapshot when it is called. - * Instead of writing the snapshot value to a .snap file, it will be written into the source code automatically. - */ - toThrowErrorMatchingInlineSnapshot(snapshot?: string): R; - } - - type RemoveFirstFromTuple = - T['length'] extends 0 ? [] : - (((...b: T) => void) extends (a: any, ...b: infer I) => void ? I : []); - - interface AsymmetricMatcher { - asymmetricMatch(other: unknown): boolean; - } - type NonAsyncMatchers = { - [K in keyof TMatchers]: ReturnType extends Promise? never: K - }[keyof TMatchers]; - type CustomAsyncMatchers = {[K in NonAsyncMatchers]: CustomAsymmetricMatcher}; - type CustomAsymmetricMatcher any> = (...args: RemoveFirstFromTuple>) => AsymmetricMatcher; - - // should be TMatcherReturn extends void|Promise but getting dtslint error - type CustomJestMatcher any, TMatcherReturn> = (...args: RemoveFirstFromTuple>) => TMatcherReturn; - - type ExpectProperties= { - [K in keyof Expect]: Expect[K] - }; - // should be TMatcherReturn extends void|Promise but getting dtslint error - // Use the `void` type for return types only. Otherwise, use `undefined`. See: https://github.com/Microsoft/dtslint/blob/master/docs/void-return.md - // have added issue https://github.com/microsoft/dtslint/issues/256 - Cannot have type union containing void ( to be used as return type only - type ExtendedMatchers = Matchers & {[K in keyof TMatchers]: CustomJestMatcher}; - type JestExtendedMatchers = JestMatchersShape, ExtendedMatchers, TActual>>; - - // when have called expect.extend - type ExtendedExpectFunction = (actual: TActual) => JestExtendedMatchers; - - type ExtendedExpect= - ExpectProperties & - AndNot> & - ExtendedExpectFunction; - - type NonPromiseMatchers> = Omit; - type PromiseMatchers = Omit; - - interface Constructable { - new (...args: any[]): any; - } - - interface Mock extends Function, MockInstance { - new (...args: Y): T; - (...args: Y): T; - } - - interface SpyInstance extends MockInstance {} - - /** - * Represents a function that has been spied on. - */ - type SpiedFunction any> = SpyInstance, ArgsType>; - - /** - * Wrap a function with mock definitions - * - * @example - * - * import { myFunction } from "./library"; - * jest.mock("./library"); - * - * const mockMyFunction = myFunction as jest.MockedFunction; - * expect(mockMyFunction.mock.calls[0][0]).toBe(42); - */ - type MockedFunction any> = MockInstance, ArgsType> & T; - - /** - * Wrap a class with mock definitions - * - * @example - * - * import { MyClass } from "./library"; - * jest.mock("./library"); - * - * const mockedMyClass = MyClass as jest.MockedClass; - * - * expect(mockedMyClass.mock.calls[0][0]).toBe(42); // Constructor calls - * expect(mockedMyClass.prototype.myMethod.mock.calls[0][0]).toBe(42); // Method calls - */ - - type MockedClass = MockInstance< - InstanceType, - T extends new (...args: infer P) => any ? P : never - > & { - prototype: T extends { prototype: any } ? Mocked : never; - } & T; - - /** - * Wrap an object or a module with mock definitions - * - * @example - * - * jest.mock("../api"); - * import * as api from "../api"; - * - * const mockApi = api as jest.Mocked; - * api.MyApi.prototype.myApiMethod.mockImplementation(() => "test"); - */ - type Mocked = { - [P in keyof T]: T[P] extends (...args: any[]) => any - ? MockInstance, ArgsType> - : T[P] extends Constructable - ? MockedClass - : T[P] - } & - T; - - interface MockInstance { - /** Returns the mock name string set by calling `mockFn.mockName(value)`. */ - getMockName(): string; - /** Provides access to the mock's metadata */ - mock: MockContext; - /** - * Resets all information stored in the mockFn.mock.calls and mockFn.mock.instances arrays. - * - * Often this is useful when you want to clean up a mock's usage data between two assertions. - * - * Beware that `mockClear` will replace `mockFn.mock`, not just `mockFn.mock.calls` and `mockFn.mock.instances`. - * You should therefore avoid assigning mockFn.mock to other variables, temporary or not, to make sure you - * don't access stale data. - */ - mockClear(): this; - /** - * Resets all information stored in the mock, including any initial implementation and mock name given. - * - * This is useful when you want to completely restore a mock back to its initial state. - * - * Beware that `mockReset` will replace `mockFn.mock`, not just `mockFn.mock.calls` and `mockFn.mock.instances`. - * You should therefore avoid assigning mockFn.mock to other variables, temporary or not, to make sure you - * don't access stale data. - */ - mockReset(): this; - /** - * Does everything that `mockFn.mockReset()` does, and also restores the original (non-mocked) implementation. - * - * This is useful when you want to mock functions in certain test cases and restore the original implementation in others. - * - * Beware that `mockFn.mockRestore` only works when mock was created with `jest.spyOn`. Thus you have to take care of restoration - * yourself when manually assigning `jest.fn()`. - * - * The [`restoreMocks`](https://jestjs.io/docs/en/configuration.html#restoremocks-boolean) configuration option is available - * to restore mocks automatically between tests. - */ - mockRestore(): void; - /** - * Returns the function that was set as the implementation of the mock (using mockImplementation). - */ - getMockImplementation(): ((...args: Y) => T) | undefined; - /** - * Accepts a function that should be used as the implementation of the mock. The mock itself will still record - * all calls that go into and instances that come from itself – the only difference is that the implementation - * will also be executed when the mock is called. - * - * Note: `jest.fn(implementation)` is a shorthand for `jest.fn().mockImplementation(implementation)`. - */ - mockImplementation(fn?: (...args: Y) => T): this; - /** - * Accepts a function that will be used as an implementation of the mock for one call to the mocked function. - * Can be chained so that multiple function calls produce different results. - * - * @example - * - * const myMockFn = jest - * .fn() - * .mockImplementationOnce(cb => cb(null, true)) - * .mockImplementationOnce(cb => cb(null, false)); - * - * myMockFn((err, val) => console.log(val)); // true - * - * myMockFn((err, val) => console.log(val)); // false - */ - mockImplementationOnce(fn: (...args: Y) => T): this; - /** Sets the name of the mock`. */ - mockName(name: string): this; - /** - * Just a simple sugar function for: - * - * @example - * - * jest.fn(function() { - * return this; - * }); - */ - mockReturnThis(): this; - /** - * Accepts a value that will be returned whenever the mock function is called. - * - * @example - * - * const mock = jest.fn(); - * mock.mockReturnValue(42); - * mock(); // 42 - * mock.mockReturnValue(43); - * mock(); // 43 - */ - mockReturnValue(value: T): this; - /** - * Accepts a value that will be returned for one call to the mock function. Can be chained so that - * successive calls to the mock function return different values. When there are no more - * `mockReturnValueOnce` values to use, calls will return a value specified by `mockReturnValue`. - * - * @example - * - * const myMockFn = jest.fn() - * .mockReturnValue('default') - * .mockReturnValueOnce('first call') - * .mockReturnValueOnce('second call'); - * - * // 'first call', 'second call', 'default', 'default' - * console.log(myMockFn(), myMockFn(), myMockFn(), myMockFn()); - * - */ - mockReturnValueOnce(value: T): this; - /** - * Simple sugar function for: `jest.fn().mockImplementation(() => Promise.resolve(value));` - */ - mockResolvedValue(value: ResolvedValue): this; - /** - * Simple sugar function for: `jest.fn().mockImplementationOnce(() => Promise.resolve(value));` - * - * @example - * - * test('async test', async () => { - * const asyncMock = jest - * .fn() - * .mockResolvedValue('default') - * .mockResolvedValueOnce('first call') - * .mockResolvedValueOnce('second call'); - * - * await asyncMock(); // first call - * await asyncMock(); // second call - * await asyncMock(); // default - * await asyncMock(); // default - * }); - * - */ - mockResolvedValueOnce(value: ResolvedValue): this; - /** - * Simple sugar function for: `jest.fn().mockImplementation(() => Promise.reject(value));` - * - * @example - * - * test('async test', async () => { - * const asyncMock = jest.fn().mockRejectedValue(new Error('Async error')); - * - * await asyncMock(); // throws "Async error" - * }); - */ - mockRejectedValue(value: RejectedValue): this; - - /** - * Simple sugar function for: `jest.fn().mockImplementationOnce(() => Promise.reject(value));` - * - * @example - * - * test('async test', async () => { - * const asyncMock = jest - * .fn() - * .mockResolvedValueOnce('first call') - * .mockRejectedValueOnce(new Error('Async error')); - * - * await asyncMock(); // first call - * await asyncMock(); // throws "Async error" - * }); - * - */ - mockRejectedValueOnce(value: RejectedValue): this; - } - - /** - * Represents the result of a single call to a mock function with a return value. - */ - interface MockResultReturn { - type: 'return'; - value: T; - } - /** - * Represents the result of a single incomplete call to a mock function. - */ - interface MockResultIncomplete { - type: 'incomplete'; - value: undefined; - } - /** - * Represents the result of a single call to a mock function with a thrown error. - */ - interface MockResultThrow { - type: 'throw'; - value: any; - } - - type MockResult = MockResultReturn | MockResultThrow | MockResultIncomplete; - - interface MockContext { - calls: Y[]; - instances: T[]; - invocationCallOrder: number[]; - /** - * List of results of calls to the mock function. - */ - results: Array>; - } -} +declare var beforeAll: typeof import('@jest/globals').beforeAll; +declare var beforeEach: typeof import('@jest/globals').beforeEach; +declare var afterAll: typeof import('@jest/globals').afterAll; +declare var afterEach: typeof import('@jest/globals').afterEach; +declare var describe: typeof import('@jest/globals').describe; +declare var fdescribe: typeof import('@jest/globals').fdescribe; +declare var xdescribe: typeof import('@jest/globals').xdescribe; +declare var it: typeof import('@jest/globals').it; +declare var fit: typeof import('@jest/globals').fit; +declare var xit: typeof import('@jest/globals').xit; +declare var test: typeof import('@jest/globals').test; +declare var xtest: typeof import('@jest/globals').xtest; + +declare const expect: typeof import('@jest/globals').expect; + +declare const jest: typeof import('@jest/globals').jest; // Jest ships with a copy of Jasmine. They monkey-patch its APIs and divergence/deprecation are expected. // Relevant parts of Jasmine's API are below so they can be changed and removed over time. diff --git a/types/jest/package.json b/types/jest/package.json index aa4fbd60f500b53..9ed3cfe66791733 100644 --- a/types/jest/package.json +++ b/types/jest/package.json @@ -1,8 +1,7 @@ { "private": true, "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" + "@jest/globals": "^27.0.0" }, "exports": { ".": {