123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- /// <reference types="node" />
- import type { Context } from 'vm';
- import type { LegacyFakeTimers, ModernFakeTimers } from '@jest/fake-timers';
- import type { Circus, Config, Global } from '@jest/types';
- import type { fn as JestMockFn, mocked as JestMockMocked, spyOn as JestMockSpyOn, ModuleMocker } from 'jest-mock';
- export declare type EnvironmentContext = {
- console: Console;
- docblockPragmas: Record<string, string | Array<string>>;
- testPath: Config.Path;
- };
- export declare type ModuleWrapper = (this: Module['exports'], module: Module, exports: Module['exports'], require: Module['require'], __dirname: string, __filename: Module['filename'], jest?: Jest, ...extraGlobals: Array<Global.Global[keyof Global.Global]>) => unknown;
- export declare class JestEnvironment<Timer = unknown> {
- constructor(config: Config.ProjectConfig, context?: EnvironmentContext);
- global: Global.Global;
- fakeTimers: LegacyFakeTimers<Timer> | null;
- fakeTimersModern: ModernFakeTimers | null;
- moduleMocker: ModuleMocker | null;
- getVmContext(): Context | null;
- setup(): Promise<void>;
- teardown(): Promise<void>;
- handleTestEvent?: Circus.EventHandler;
- exportConditions?: () => Array<string>;
- }
- export declare type Module = NodeModule;
- export interface 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.
- */
- advanceTimersToNextTimer(steps?: number): void;
- /**
- * Disables automatic mocking in the module loader.
- */
- autoMockOff(): Jest;
- /**
- * Enables automatic mocking in the module loader.
- */
- autoMockOn(): Jest;
- /**
- * Clears the mock.calls and mock.instances properties of all mocks.
- * Equivalent to calling .mockClear() on every mocked function.
- */
- clearAllMocks(): 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.
- */
- clearAllTimers(): void;
- /**
- * Indicates that the module system should never return a mocked version
- * of the specified module, including all of the specified module's
- * dependencies.
- */
- deepUnmock(moduleName: string): Jest;
- /**
- * Disables automatic mocking in the module loader.
- *
- * After this method is called, all `require()`s will return the real
- * versions of each module (rather than a mocked version).
- */
- disableAutomock(): Jest;
- /**
- * When using `babel-jest`, calls to mock will automatically be hoisted to
- * the top of the code block. Use this method if you want to explicitly avoid
- * this behavior.
- */
- doMock(moduleName: string, moduleFactory?: () => unknown, options?: {
- virtual?: boolean;
- }): 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).
- */
- dontMock(moduleName: string): Jest;
- /**
- * Enables automatic mocking in the module loader.
- */
- enableAutomock(): Jest;
- /**
- * Creates a mock function. Optionally takes a mock implementation.
- */
- fn: typeof JestMockFn;
- /**
- * Given the name of a module, use the automatic mocking system to generate a
- * mocked version of the module for you.
- *
- * This is useful when you want to create a manual mock that extends the
- * automatic mock's behavior.
- *
- * @deprecated Use `jest.createMockFromModule()` instead
- */
- genMockFromModule(moduleName: string): unknown;
- /**
- * Given the name of a module, use the automatic mocking system to generate a
- * mocked version of the module for you.
- *
- * This is useful when you want to create a manual mock that extends the
- * automatic mock's behavior.
- */
- createMockFromModule(moduleName: string): unknown;
- /**
- * Determines if the given function is a mocked function.
- */
- isMockFunction(fn: (...args: Array<any>) => unknown): fn is ReturnType<typeof JestMockFn>;
- /**
- * Mocks a module with an auto-mocked version when it is being required.
- */
- mock(moduleName: string, moduleFactory?: () => unknown, options?: {
- virtual?: boolean;
- }): Jest;
- /**
- * Mocks a module with the provided module factory when it is being imported.
- */
- unstable_mockModule<T = unknown>(moduleName: string, moduleFactory: () => Promise<T> | T, options?: {
- virtual?: boolean;
- }): Jest;
- /**
- * Returns the actual module instead of a mock, bypassing all checks on
- * whether the module should receive a mock implementation or not.
- *
- * @example
- ```
- jest.mock('../myModule', () => {
- // Require the original module to not be mocked...
- const originalModule = jest.requireActual(moduleName);
- return {
- __esModule: true, // Use it when dealing with esModules
- ...originalModule,
- getRandom: jest.fn().mockReturnValue(10),
- };
- });
-
- const getRandom = require('../myModule').getRandom;
-
- getRandom(); // Always returns 10
- ```
- */
- requireActual: (moduleName: string) => unknown;
- /**
- * Returns a mock module instead of the actual module, bypassing all checks
- * on whether the module should be required normally or not.
- */
- requireMock: (moduleName: string) => unknown;
- /**
- * Resets the state of all mocks.
- * Equivalent to calling .mockReset() on every mocked function.
- */
- resetAllMocks(): Jest;
- /**
- * Resets the module registry - the cache of all required modules. This is
- * useful to isolate modules where local state might conflict between tests.
- */
- resetModules(): Jest;
- /**
- * Restores all mocks back to their original value. Equivalent to calling
- * `.mockRestore` on every mocked function.
- *
- * Beware that jest.restoreAllMocks() only works when the mock was created with
- * jest.spyOn; other mocks will require you to manually restore them.
- */
- restoreAllMocks(): Jest;
- mocked: typeof JestMockMocked;
- /**
- * Runs failed tests n-times until they pass or until the max number of
- * retries is exhausted. This only works with `jest-circus`!
- */
- retryTimes(numRetries: number): Jest;
- /**
- * Exhausts tasks queued by setImmediate().
- *
- * > Note: This function is not available when using Lolex as fake timers implementation
- */
- runAllImmediates(): void;
- /**
- * Exhausts the micro-task queue (usually interfaced in node via
- * process.nextTick).
- */
- runAllTicks(): void;
- /**
- * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout()
- * and setInterval()).
- */
- runAllTimers(): void;
- /**
- * 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.
- */
- runOnlyPendingTimers(): void;
- /**
- * 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.
- */
- advanceTimersByTime(msToRun: number): void;
- /**
- * Returns the number of fake timers still left to run.
- */
- getTimerCount(): number;
- /**
- * Explicitly supplies the mock object that the module system should return
- * for the specified module.
- *
- * Note It is recommended to use `jest.mock()` instead. The `jest.mock`
- * API's second argument is a module factory instead of the expected
- * exported module object.
- */
- setMock(moduleName: string, moduleExports: unknown): 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.
- */
- setTimeout(timeout: number): 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.
- */
- spyOn: typeof JestMockSpyOn;
- /**
- * 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).
- */
- unmock(moduleName: string): Jest;
- /**
- * Instructs Jest to use fake versions of the standard timer functions.
- */
- useFakeTimers(implementation?: 'modern' | 'legacy'): Jest;
- /**
- * Instructs Jest to use the real versions of the standard timer functions.
- */
- useRealTimers(): Jest;
- /**
- * `jest.isolateModules(fn)` goes a step further than `jest.resetModules()`
- * and 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.
- */
- isolateModules(fn: () => void): Jest;
- /**
- * 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 Lolex as fake timers implementation
- */
- getRealSystemTime(): 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 Lolex as fake timers implementation
- */
- setSystemTime(now?: number | Date): void;
- }
|