diff --git a/CHANGELOG.md b/CHANGELOG.md index 758d2c412a16..b9c56f0c8285 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `[expect]` Tweak and improve types ([#11949](https://github.com/facebook/jest/pull/11949)) - `[jest-runtime]` Ensure absolute paths can be resolved within test modules ([#11943](https://github.com/facebook/jest/pull/11943)) +- `[jest-runtime]` Fix `instanceof` for `ModernFakeTimers` and `LegacyFakeTimers` methods ([#11946](https://github.com/facebook/jest/pull/11946)) ### Chore & Maintenance diff --git a/docs/Puppeteer.md b/docs/Puppeteer.md index 6c8e67e40d10..53c16767b74e 100644 --- a/docs/Puppeteer.md +++ b/docs/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ``` diff --git a/e2e/resolve-conditions/package.json b/e2e/resolve-conditions/package.json index 987f46111b8a..33449adf2da3 100644 --- a/e2e/resolve-conditions/package.json +++ b/e2e/resolve-conditions/package.json @@ -13,6 +13,6 @@ "transform": {} }, "dependencies": { - "resolve.exports": "^1.0.2" + "resolve.exports": "^1.1.0" } } diff --git a/e2e/resolve-conditions/resolver.js b/e2e/resolve-conditions/resolver.js index 98c8aed1bf67..09cee4fb91a3 100644 --- a/e2e/resolve-conditions/resolver.js +++ b/e2e/resolve-conditions/resolver.js @@ -24,13 +24,7 @@ function createPathFilter(conditions) { const path = relativePath === 'index' ? '.' : relativePath; return ( - resolveExports(pkg, path, { - // `resolve.exports adds `node` unless `browser` is `false`, so let's add this ugly thing - browser: conditions.includes('browser'), - conditions, - // `resolve.exports adds `import` unless `require` is `false`, so let's add this ugly thing - require: conditions.includes('require'), - }) || relativePath + resolveExports(pkg, path, {conditions, unsafe: true}) || relativePath ); }; } diff --git a/e2e/resolve-conditions/yarn.lock b/e2e/resolve-conditions/yarn.lock index b98bb300b2b9..df2f59b137b1 100644 --- a/e2e/resolve-conditions/yarn.lock +++ b/e2e/resolve-conditions/yarn.lock @@ -5,10 +5,10 @@ __metadata: version: 4 cacheKey: 7 -"resolve.exports@npm:^1.0.2": - version: 1.0.2 - resolution: "resolve.exports@npm:1.0.2" - checksum: 012a46e3ae41c53762abf5b50ea1b4adf2de617bbea1dbc7bf6e609c1ceaedee7782acbc92d443951d5dd0c3a8fb1090ce73285a9ccc24b530e33b5e09ae196f +"resolve.exports@npm:^1.1.0": + version: 1.1.0 + resolution: "resolve.exports@npm:1.1.0" + checksum: d04d2ce651fac14fe6ba13b377690f790cbbe91e6211b8fbec97ee08282e278875c74073a9b6243143a64e33d95eefb479e1dd4965664edc73b28b712100b36c languageName: node linkType: hard @@ -16,6 +16,6 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - resolve.exports: ^1.0.2 + resolve.exports: ^1.1.0 languageName: unknown linkType: soft diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 881360f1050c..a498152b1a2e 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -16,7 +16,6 @@ "dependencies": { "@jest/console": "^27.2.5", "@jest/environment": "^27.2.5", - "@jest/fake-timers": "^27.2.5", "@jest/globals": "^27.2.5", "@jest/source-map": "^27.0.6", "@jest/test-result": "^27.2.5", @@ -43,6 +42,7 @@ "yargs": "^16.2.0" }, "devDependencies": { + "@jest/fake-timers": "^27.2.5", "@jest/test-utils": "^27.2.5", "@types/exit": "^0.1.30", "@types/glob": "^7.1.1", diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index c8cfa5c17246..8640b45ea405 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -30,7 +30,7 @@ import type { Module, ModuleWrapper, } from '@jest/environment'; -import {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; +import type {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; import type * as JestGlobals from '@jest/globals'; import type {SourceMapRegistry} from '@jest/source-map'; import type {RuntimeTransformResult, V8CoverageResult} from '@jest/test-result'; @@ -1963,7 +1963,7 @@ export default class Runtime { getRealSystemTime: () => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof ModernFakeTimers) { + if (fakeTimers === this._environment.fakeTimersModern) { return fakeTimers.getRealSystemTime(); } else { throw new TypeError( @@ -1984,7 +1984,7 @@ export default class Runtime { runAllImmediates: () => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof LegacyFakeTimers) { + if (fakeTimers === this._environment.fakeTimers) { fakeTimers.runAllImmediates(); } else { throw new TypeError( @@ -2000,7 +2000,7 @@ export default class Runtime { setSystemTime: (now?: number | Date) => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof ModernFakeTimers) { + if (fakeTimers === this._environment.fakeTimersModern) { fakeTimers.setSystemTime(now); } else { throw new TypeError( diff --git a/website/versioned_docs/version-25.x/Puppeteer.md b/website/versioned_docs/version-25.x/Puppeteer.md index 3349f73da2a7..c0b92dfd97dd 100644 --- a/website/versioned_docs/version-25.x/Puppeteer.md +++ b/website/versioned_docs/version-25.x/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ``` diff --git a/website/versioned_docs/version-26.x/Puppeteer.md b/website/versioned_docs/version-26.x/Puppeteer.md index 3349f73da2a7..c0b92dfd97dd 100644 --- a/website/versioned_docs/version-26.x/Puppeteer.md +++ b/website/versioned_docs/version-26.x/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ``` diff --git a/website/versioned_docs/version-27.0/Puppeteer.md b/website/versioned_docs/version-27.0/Puppeteer.md index 6c8e67e40d10..53c16767b74e 100644 --- a/website/versioned_docs/version-27.0/Puppeteer.md +++ b/website/versioned_docs/version-27.0/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ``` diff --git a/website/versioned_docs/version-27.1/Puppeteer.md b/website/versioned_docs/version-27.1/Puppeteer.md index 6c8e67e40d10..53c16767b74e 100644 --- a/website/versioned_docs/version-27.1/Puppeteer.md +++ b/website/versioned_docs/version-27.1/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ``` diff --git a/website/versioned_docs/version-27.2/Puppeteer.md b/website/versioned_docs/version-27.2/Puppeteer.md index 6c8e67e40d10..53c16767b74e 100644 --- a/website/versioned_docs/version-27.2/Puppeteer.md +++ b/website/versioned_docs/version-27.2/Puppeteer.md @@ -55,10 +55,9 @@ Here's an example of the GlobalSetup script ```js // setup.js -const {writeFile} = require('fs').promises; +const {mkdir, writeFile} = require('fs').promises; const os = require('os'); const path = require('path'); -const mkdirp = require('mkdirp'); const puppeteer = require('puppeteer'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); @@ -70,7 +69,7 @@ module.exports = async function () { global.__BROWSER_GLOBAL__ = browser; // use the file system to expose the wsEndpoint for TestEnvironments - mkdirp.sync(DIR); + await mkdir(DIR, {recursive: true}); await writeFile(path.join(DIR, 'wsEndpoint'), browser.wsEndpoint()); }; ``` @@ -122,9 +121,9 @@ Finally, we can close the puppeteer instance and clean-up the file ```js // teardown.js +const fs = require('fs').promises; const os = require('os'); const path = require('path'); -const rimraf = require('rimraf'); const DIR = path.join(os.tmpdir(), 'jest_puppeteer_global_setup'); module.exports = async function () { @@ -132,7 +131,7 @@ module.exports = async function () { await global.__BROWSER_GLOBAL__.close(); // clean-up the wsEndpoint file - rimraf.sync(DIR); + await fs.rm(DIR, {recursive: true, force: true}); }; ```