From de74997657ce896d353c841e9bdd377e0c382edf Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:02:02 +0300 Subject: [PATCH 1/7] test: extend v8 coverage test suite --- .../coverageProviderV8.test.ts-.snap | 72 ++++++++++++++ .../coverageProviderV8.test.ts.snap | 87 +++++++++++++++++ .../__snapshots__/v8Coverage.test.ts.snap | 25 ----- e2e/__tests__/coverageProviderV8.test.ts | 96 +++++++++++++++++++ e2e/__tests__/v8Coverage.test.ts | 38 -------- .../__tests__/test.js | 12 +++ .../cjs-native-without-sourcemap/module.js | 24 +++++ .../cjs-native-without-sourcemap/package.json | 9 ++ .../cjs-native-without-sourcemap/uncovered.js | 8 ++ .../__tests__/test.ts | 12 +++ .../cjs-with-babel-transformer/module.ts | 26 +++++ .../cjs-with-babel-transformer/package.json | 13 +++ .../cjs-with-babel-transformer/types.ts | 8 ++ .../cjs-with-babel-transformer/uncovered.ts | 8 ++ .../empty-sourcemap/__tests__/test.ts | 0 .../empty-sourcemap/babel.config.js | 0 .../empty-sourcemap/package.json | 0 .../empty-sourcemap/types.ts | 0 .../__tests__/test.js | 12 +++ .../esm-native-without-sourcemap/module.js | 24 +++++ .../esm-native-without-sourcemap/package.json | 10 ++ .../esm-native-without-sourcemap/uncovered.js | 8 ++ .../__tests__/test.ts | 12 +++ .../esm-with-custom-transformer/module.ts | 26 +++++ .../esm-with-custom-transformer/package.json | 14 +++ .../esm-with-custom-transformer/types.ts | 8 ++ .../typescriptPreprocessor.js | 26 +++++ .../esm-with-custom-transformer/uncovered.ts | 8 ++ .../no-sourcemap/Thing.js | 0 .../no-sourcemap/__tests__/Thing.test.js | 0 .../no-sourcemap/cssTransform.js | 0 .../no-sourcemap/package.json | 0 .../no-sourcemap/x.css | 0 33 files changed, 523 insertions(+), 63 deletions(-) create mode 100644 e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap create mode 100644 e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap delete mode 100644 e2e/__tests__/__snapshots__/v8Coverage.test.ts.snap create mode 100644 e2e/__tests__/coverageProviderV8.test.ts delete mode 100644 e2e/__tests__/v8Coverage.test.ts create mode 100644 e2e/coverage-provider-v8/cjs-native-without-sourcemap/__tests__/test.js create mode 100644 e2e/coverage-provider-v8/cjs-native-without-sourcemap/module.js create mode 100644 e2e/coverage-provider-v8/cjs-native-without-sourcemap/package.json create mode 100644 e2e/coverage-provider-v8/cjs-native-without-sourcemap/uncovered.js create mode 100644 e2e/coverage-provider-v8/cjs-with-babel-transformer/__tests__/test.ts create mode 100644 e2e/coverage-provider-v8/cjs-with-babel-transformer/module.ts create mode 100644 e2e/coverage-provider-v8/cjs-with-babel-transformer/package.json create mode 100644 e2e/coverage-provider-v8/cjs-with-babel-transformer/types.ts create mode 100644 e2e/coverage-provider-v8/cjs-with-babel-transformer/uncovered.ts rename e2e/{v8-coverage => coverage-provider-v8}/empty-sourcemap/__tests__/test.ts (100%) rename e2e/{v8-coverage => coverage-provider-v8}/empty-sourcemap/babel.config.js (100%) rename e2e/{v8-coverage => coverage-provider-v8}/empty-sourcemap/package.json (100%) rename e2e/{v8-coverage => coverage-provider-v8}/empty-sourcemap/types.ts (100%) create mode 100644 e2e/coverage-provider-v8/esm-native-without-sourcemap/__tests__/test.js create mode 100644 e2e/coverage-provider-v8/esm-native-without-sourcemap/module.js create mode 100644 e2e/coverage-provider-v8/esm-native-without-sourcemap/package.json create mode 100644 e2e/coverage-provider-v8/esm-native-without-sourcemap/uncovered.js create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/__tests__/test.ts create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/module.ts create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/package.json create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/types.ts create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/typescriptPreprocessor.js create mode 100644 e2e/coverage-provider-v8/esm-with-custom-transformer/uncovered.ts rename e2e/{v8-coverage => coverage-provider-v8}/no-sourcemap/Thing.js (100%) rename e2e/{v8-coverage => coverage-provider-v8}/no-sourcemap/__tests__/Thing.test.js (100%) rename e2e/{v8-coverage => coverage-provider-v8}/no-sourcemap/cssTransform.js (100%) rename e2e/{v8-coverage => coverage-provider-v8}/no-sourcemap/package.json (100%) rename e2e/{v8-coverage => coverage-provider-v8}/no-sourcemap/x.css (100%) diff --git a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap new file mode 100644 index 000000000000..618a5f2e86bb --- /dev/null +++ b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap @@ -0,0 +1,72 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`prints correct coverage report, if a CJS module is put under test without transformation 1`] = ` + console.log + this will print + + at covered (module.js:11:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 59.38 | 60 | 50 | 59.38 | + module.js | 79.17 | 75 | 66.67 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test 1`] = ` + console.log + this will print + + at log (module.ts:13:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test 1`] = ` + console.log + this will print + + at covered (module.ts:13:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if an ESM module is put under test without transformation 1`] = ` + console.log + this will print + + at covered (module.js:11:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 59.38 | 50 | 33.33 | 59.38 | + module.js | 79.17 | 66.67 | 50 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints coverage with empty sourcemaps 1`] = ` +----------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +----------|---------|----------|---------|---------|------------------- +All files | 100 | 100 | 100 | 100 | + types.ts | 100 | 100 | 100 | 100 | +----------|---------|----------|---------|---------|------------------- +`; diff --git a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap new file mode 100644 index 000000000000..659dcd75a75c --- /dev/null +++ b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap @@ -0,0 +1,87 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`prints correct coverage report, if a CJS module is put under test without transformation 1`] = ` + console.log + this will print + + at covered (module.js:11:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 59.38 | 60 | 50 | 59.38 | + module.js | 79.17 | 75 | 66.67 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test 1`] = ` + console.log + this will print + + at log (module.ts:13:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test 1`] = ` + console.log + this will print + + at covered (module.ts:13:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints correct coverage report, if an ESM module is put under test without transformation 1`] = ` + console.log + this will print + + at covered (module.js:11:11) + +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 59.38 | 50 | 33.33 | 59.38 | + module.js | 79.17 | 66.67 | 50 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 +--------------|---------|----------|---------|---------|------------------- +`; + +exports[`prints coverage with empty sourcemaps 1`] = ` +----------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +----------|---------|----------|---------|---------|------------------- +All files | 100 | 100 | 100 | 100 | + types.ts | 100 | 100 | 100 | 100 | +----------|---------|----------|---------|---------|------------------- +`; + +exports[`prints coverage with missing sourcemaps 1`] = ` + console.log + 42 + + at Object.log (__tests__/Thing.test.js:10:9) + +----------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +----------|---------|----------|---------|---------|------------------- +All files | 100 | 100 | 100 | 100 | + Thing.js | 100 | 100 | 100 | 100 | + x.css | 100 | 100 | 100 | 100 | +----------|---------|----------|---------|---------|------------------- +`; diff --git a/e2e/__tests__/__snapshots__/v8Coverage.test.ts.snap b/e2e/__tests__/__snapshots__/v8Coverage.test.ts.snap deleted file mode 100644 index b2ec317a31d6..000000000000 --- a/e2e/__tests__/__snapshots__/v8Coverage.test.ts.snap +++ /dev/null @@ -1,25 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`prints coverage with empty sourcemaps 1`] = ` -----------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------|---------|----------|---------|---------|------------------- -All files | 100 | 100 | 100 | 100 | - types.ts | 100 | 100 | 100 | 100 | -----------|---------|----------|---------|---------|------------------- -`; - -exports[`prints coverage with missing sourcemaps 1`] = ` - console.log - 42 - - at Object.log (__tests__/Thing.test.js:10:9) - -----------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------|---------|----------|---------|---------|------------------- -All files | 100 | 100 | 100 | 100 | - Thing.js | 100 | 100 | 100 | 100 | - x.css | 100 | 100 | 100 | 100 | -----------|---------|----------|---------|---------|------------------- -`; diff --git a/e2e/__tests__/coverageProviderV8.test.ts b/e2e/__tests__/coverageProviderV8.test.ts new file mode 100644 index 000000000000..069b23c487f0 --- /dev/null +++ b/e2e/__tests__/coverageProviderV8.test.ts @@ -0,0 +1,96 @@ +/** + * 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. + */ + +import * as path from 'path'; +import wrap from 'jest-snapshot-serializer-raw'; +import runJest from '../runJest'; + +const DIR = path.resolve(__dirname, '../coverage-provider-v8'); + +test('prints coverage with missing sourcemaps', () => { + const sourcemapDir = path.join(DIR, 'no-sourcemap'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8'], + {stripAnsi: true}, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); + +test('prints coverage with empty sourcemaps', () => { + const sourcemapDir = path.join(DIR, 'empty-sourcemap'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8'], + {stripAnsi: true}, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); + +test('prints correct coverage report, if a CJS module is put under test without transformation', () => { + const sourcemapDir = path.join(DIR, 'cjs-native-without-sourcemap'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + {stripAnsi: true}, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); + +test('prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test', () => { + const sourcemapDir = path.join(DIR, 'cjs-with-babel-transformer'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + {stripAnsi: true}, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); + +test('prints correct coverage report, if an ESM module is put under test without transformation', () => { + const sourcemapDir = path.join(DIR, 'esm-native-without-sourcemap'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + { + nodeOptions: '--experimental-vm-modules --no-warnings', + stripAnsi: true, + }, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); + +test('prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test', () => { + const sourcemapDir = path.join(DIR, 'esm-with-custom-transformer'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + { + nodeOptions: '--experimental-vm-modules --no-warnings', + stripAnsi: true, + }, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); +}); diff --git a/e2e/__tests__/v8Coverage.test.ts b/e2e/__tests__/v8Coverage.test.ts deleted file mode 100644 index 199420b0fb84..000000000000 --- a/e2e/__tests__/v8Coverage.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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. - */ - -import * as path from 'path'; -import wrap from 'jest-snapshot-serializer-raw'; -import runJest from '../runJest'; - -const DIR = path.resolve(__dirname, '../v8-coverage'); - -test('prints coverage with missing sourcemaps', () => { - const sourcemapDir = path.join(DIR, 'no-sourcemap'); - - const {stdout, exitCode} = runJest( - sourcemapDir, - ['--coverage', '--coverage-provider', 'v8'], - {stripAnsi: true}, - ); - - expect(exitCode).toBe(0); - expect(wrap(stdout)).toMatchSnapshot(); -}); - -test('prints coverage with empty sourcemaps', () => { - const sourcemapDir = path.join(DIR, 'empty-sourcemap'); - - const {stdout, exitCode} = runJest( - sourcemapDir, - ['--coverage', '--coverage-provider', 'v8'], - {stripAnsi: true}, - ); - - expect(exitCode).toBe(0); - expect(wrap(stdout)).toMatchSnapshot(); -}); diff --git a/e2e/coverage-provider-v8/cjs-native-without-sourcemap/__tests__/test.js b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/__tests__/test.js new file mode 100644 index 000000000000..71703f1c2d13 --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/__tests__/test.js @@ -0,0 +1,12 @@ +/** + * 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. + */ + +const {value} = require('../module'); + +test('dummy', () => { + expect(value).toBe('abc'); +}); diff --git a/e2e/coverage-provider-v8/cjs-native-without-sourcemap/module.js b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/module.js new file mode 100644 index 000000000000..2178e49d175f --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/module.js @@ -0,0 +1,24 @@ +/** + * 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. + */ + +const value = 'abc'; + +function covered() { + console.log('this will print'); +} + +function uncovered() { + console.log('this will not'); +} + +if (value !== 'abc') { + uncovered(); +} + +covered(); + +module.exports = {value}; diff --git a/e2e/coverage-provider-v8/cjs-native-without-sourcemap/package.json b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/package.json new file mode 100644 index 000000000000..70ac892f2653 --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/package.json @@ -0,0 +1,9 @@ +{ + "jest": { + "collectCoverageFrom": [ + "/*.js" + ], + "transform": { + } + } +} diff --git a/e2e/coverage-provider-v8/cjs-native-without-sourcemap/uncovered.js b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/uncovered.js new file mode 100644 index 000000000000..54e6c946a5f7 --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-native-without-sourcemap/uncovered.js @@ -0,0 +1,8 @@ +/** + * 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. + */ + +module.exports = {}; diff --git a/e2e/coverage-provider-v8/cjs-with-babel-transformer/__tests__/test.ts b/e2e/coverage-provider-v8/cjs-with-babel-transformer/__tests__/test.ts new file mode 100644 index 000000000000..95bd1508290a --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-with-babel-transformer/__tests__/test.ts @@ -0,0 +1,12 @@ +/** + * 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. + */ + +import {value} from '../module'; + +test('dummy', () => { + expect(value).toBe('abc'); +}); diff --git a/e2e/coverage-provider-v8/cjs-with-babel-transformer/module.ts b/e2e/coverage-provider-v8/cjs-with-babel-transformer/module.ts new file mode 100644 index 000000000000..408cd8f1930d --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-with-babel-transformer/module.ts @@ -0,0 +1,26 @@ +/** + * 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. + */ + +import type {A} from './types'; + +const value: A = 'abc'; + +function covered() { + console.log('this will print'); +} + +function uncovered() { + console.log('this will not'); +} + +if (value !== 'abc') { + uncovered(); +} + +covered(); + +export {value}; diff --git a/e2e/coverage-provider-v8/cjs-with-babel-transformer/package.json b/e2e/coverage-provider-v8/cjs-with-babel-transformer/package.json new file mode 100644 index 000000000000..cc9f8cec07ef --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-with-babel-transformer/package.json @@ -0,0 +1,13 @@ +{ + "babel": { + "presets": [ + ["@babel/preset-env", {"targets": {"node": "current"}}], + "@babel/preset-typescript" + ] + }, + "jest": { + "collectCoverageFrom": [ + "/*.ts" + ] + } +} diff --git a/e2e/coverage-provider-v8/cjs-with-babel-transformer/types.ts b/e2e/coverage-provider-v8/cjs-with-babel-transformer/types.ts new file mode 100644 index 000000000000..817feab75a60 --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-with-babel-transformer/types.ts @@ -0,0 +1,8 @@ +/** + * 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. + */ + +export type A = string; diff --git a/e2e/coverage-provider-v8/cjs-with-babel-transformer/uncovered.ts b/e2e/coverage-provider-v8/cjs-with-babel-transformer/uncovered.ts new file mode 100644 index 000000000000..dc9caf143caf --- /dev/null +++ b/e2e/coverage-provider-v8/cjs-with-babel-transformer/uncovered.ts @@ -0,0 +1,8 @@ +/** + * 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. + */ + +export {}; diff --git a/e2e/v8-coverage/empty-sourcemap/__tests__/test.ts b/e2e/coverage-provider-v8/empty-sourcemap/__tests__/test.ts similarity index 100% rename from e2e/v8-coverage/empty-sourcemap/__tests__/test.ts rename to e2e/coverage-provider-v8/empty-sourcemap/__tests__/test.ts diff --git a/e2e/v8-coverage/empty-sourcemap/babel.config.js b/e2e/coverage-provider-v8/empty-sourcemap/babel.config.js similarity index 100% rename from e2e/v8-coverage/empty-sourcemap/babel.config.js rename to e2e/coverage-provider-v8/empty-sourcemap/babel.config.js diff --git a/e2e/v8-coverage/empty-sourcemap/package.json b/e2e/coverage-provider-v8/empty-sourcemap/package.json similarity index 100% rename from e2e/v8-coverage/empty-sourcemap/package.json rename to e2e/coverage-provider-v8/empty-sourcemap/package.json diff --git a/e2e/v8-coverage/empty-sourcemap/types.ts b/e2e/coverage-provider-v8/empty-sourcemap/types.ts similarity index 100% rename from e2e/v8-coverage/empty-sourcemap/types.ts rename to e2e/coverage-provider-v8/empty-sourcemap/types.ts diff --git a/e2e/coverage-provider-v8/esm-native-without-sourcemap/__tests__/test.js b/e2e/coverage-provider-v8/esm-native-without-sourcemap/__tests__/test.js new file mode 100644 index 000000000000..95bd1508290a --- /dev/null +++ b/e2e/coverage-provider-v8/esm-native-without-sourcemap/__tests__/test.js @@ -0,0 +1,12 @@ +/** + * 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. + */ + +import {value} from '../module'; + +test('dummy', () => { + expect(value).toBe('abc'); +}); diff --git a/e2e/coverage-provider-v8/esm-native-without-sourcemap/module.js b/e2e/coverage-provider-v8/esm-native-without-sourcemap/module.js new file mode 100644 index 000000000000..a40799281aa6 --- /dev/null +++ b/e2e/coverage-provider-v8/esm-native-without-sourcemap/module.js @@ -0,0 +1,24 @@ +/** + * 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. + */ + +const value = 'abc'; + +function covered() { + console.log('this will print'); +} + +function uncovered() { + console.log('this will not'); +} + +if (value !== 'abc') { + uncovered(); +} + +covered(); + +export {value}; diff --git a/e2e/coverage-provider-v8/esm-native-without-sourcemap/package.json b/e2e/coverage-provider-v8/esm-native-without-sourcemap/package.json new file mode 100644 index 000000000000..aba08ce1d284 --- /dev/null +++ b/e2e/coverage-provider-v8/esm-native-without-sourcemap/package.json @@ -0,0 +1,10 @@ +{ + "type": "module", + "jest": { + "collectCoverageFrom": [ + "/*.js" + ], + "transform": { + } + } +} diff --git a/e2e/coverage-provider-v8/esm-native-without-sourcemap/uncovered.js b/e2e/coverage-provider-v8/esm-native-without-sourcemap/uncovered.js new file mode 100644 index 000000000000..dc9caf143caf --- /dev/null +++ b/e2e/coverage-provider-v8/esm-native-without-sourcemap/uncovered.js @@ -0,0 +1,8 @@ +/** + * 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. + */ + +export {}; diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/__tests__/test.ts b/e2e/coverage-provider-v8/esm-with-custom-transformer/__tests__/test.ts new file mode 100644 index 000000000000..95bd1508290a --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/__tests__/test.ts @@ -0,0 +1,12 @@ +/** + * 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. + */ + +import {value} from '../module'; + +test('dummy', () => { + expect(value).toBe('abc'); +}); diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/module.ts b/e2e/coverage-provider-v8/esm-with-custom-transformer/module.ts new file mode 100644 index 000000000000..408cd8f1930d --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/module.ts @@ -0,0 +1,26 @@ +/** + * 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. + */ + +import type {A} from './types'; + +const value: A = 'abc'; + +function covered() { + console.log('this will print'); +} + +function uncovered() { + console.log('this will not'); +} + +if (value !== 'abc') { + uncovered(); +} + +covered(); + +export {value}; diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/package.json b/e2e/coverage-provider-v8/esm-with-custom-transformer/package.json new file mode 100644 index 000000000000..7aafdbfb2b2c --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/package.json @@ -0,0 +1,14 @@ +{ + "type": "module", + "jest": { + "collectCoverageFrom": [ + "/*.ts" + ], + "extensionsToTreatAsEsm": [ + ".ts" + ], + "transform": { + "\\.ts$": "/typescriptPreprocessor.js" + } + } +} diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/types.ts b/e2e/coverage-provider-v8/esm-with-custom-transformer/types.ts new file mode 100644 index 000000000000..817feab75a60 --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/types.ts @@ -0,0 +1,8 @@ +/** + * 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. + */ + +export type A = string; diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/typescriptPreprocessor.js b/e2e/coverage-provider-v8/esm-with-custom-transformer/typescriptPreprocessor.js new file mode 100644 index 000000000000..3fec16a6891b --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/typescriptPreprocessor.js @@ -0,0 +1,26 @@ +/** + * 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. + */ + +import ts from 'typescript'; + +export default { + process(sourceText, fileName) { + if (fileName.endsWith('.ts') || fileName.endsWith('.tsx')) { + const {outputText, sourceMapText} = ts.transpileModule(sourceText, { + compilerOptions: { + module: ts.ModuleKind.ES2020, + sourceMap: true, // if code is transformed, source map is necessary for coverage + target: ts.ScriptTarget.ES2020, + }, + fileName, + }); + + return {code: outputText, map: sourceMapText}; + } + return sourceText; + }, +}; diff --git a/e2e/coverage-provider-v8/esm-with-custom-transformer/uncovered.ts b/e2e/coverage-provider-v8/esm-with-custom-transformer/uncovered.ts new file mode 100644 index 000000000000..dc9caf143caf --- /dev/null +++ b/e2e/coverage-provider-v8/esm-with-custom-transformer/uncovered.ts @@ -0,0 +1,8 @@ +/** + * 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. + */ + +export {}; diff --git a/e2e/v8-coverage/no-sourcemap/Thing.js b/e2e/coverage-provider-v8/no-sourcemap/Thing.js similarity index 100% rename from e2e/v8-coverage/no-sourcemap/Thing.js rename to e2e/coverage-provider-v8/no-sourcemap/Thing.js diff --git a/e2e/v8-coverage/no-sourcemap/__tests__/Thing.test.js b/e2e/coverage-provider-v8/no-sourcemap/__tests__/Thing.test.js similarity index 100% rename from e2e/v8-coverage/no-sourcemap/__tests__/Thing.test.js rename to e2e/coverage-provider-v8/no-sourcemap/__tests__/Thing.test.js diff --git a/e2e/v8-coverage/no-sourcemap/cssTransform.js b/e2e/coverage-provider-v8/no-sourcemap/cssTransform.js similarity index 100% rename from e2e/v8-coverage/no-sourcemap/cssTransform.js rename to e2e/coverage-provider-v8/no-sourcemap/cssTransform.js diff --git a/e2e/v8-coverage/no-sourcemap/package.json b/e2e/coverage-provider-v8/no-sourcemap/package.json similarity index 100% rename from e2e/v8-coverage/no-sourcemap/package.json rename to e2e/coverage-provider-v8/no-sourcemap/package.json diff --git a/e2e/v8-coverage/no-sourcemap/x.css b/e2e/coverage-provider-v8/no-sourcemap/x.css similarity index 100% rename from e2e/v8-coverage/no-sourcemap/x.css rename to e2e/coverage-provider-v8/no-sourcemap/x.css From 733ddcd12665b62ae145250bdd104229721e18d8 Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:02:53 +0300 Subject: [PATCH 2/7] fix: set `wrapperLength` to 0 --- packages/jest-runtime/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 436c9a916d16..28a6c44214f3 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1470,7 +1470,7 @@ export default class Runtime { this._fileTransforms.set(filename, { ...transformedFile, - wrapperLength: this.constructModuleWrapperStart().length, + wrapperLength: 0, }); if (transformedFile.sourceMapPath) { From 3e69ad2c24cfc1af3b9d86d4f0829289f9f1a3ed Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:04:25 +0300 Subject: [PATCH 3/7] chore: update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ceeb3d5e4e0..0ebccac02554 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[jest-runtime]` Correct `wrapperLength` value for ESM modules. ([#11893](https://github.com/facebook/jest/pull/11893)) + ### Chore & Maintenance ### Performance From 74a040bcf8abf7cc674dc1ca548ff0c21d767514 Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:12:27 +0300 Subject: [PATCH 4/7] test: clean up --- .../coverageProviderV8.test.ts-.snap | 72 ------------------- 1 file changed, 72 deletions(-) delete mode 100644 e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap diff --git a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap deleted file mode 100644 index 618a5f2e86bb..000000000000 --- a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts-.snap +++ /dev/null @@ -1,72 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`prints correct coverage report, if a CJS module is put under test without transformation 1`] = ` - console.log - this will print - - at covered (module.js:11:11) - ---------------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------|---------|----------|---------|---------|------------------- -All files | 59.38 | 60 | 50 | 59.38 | - module.js | 79.17 | 75 | 66.67 | 79.17 | 14-16,19-20 - uncovered.js | 0 | 0 | 0 | 0 | 1-8 ---------------|---------|----------|---------|---------|------------------- -`; - -exports[`prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test 1`] = ` - console.log - this will print - - at log (module.ts:13:11) - ---------------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------|---------|----------|---------|---------|------------------- -All files | 50 | 25 | 25 | 50 | - module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 - types.ts | 0 | 0 | 0 | 0 | 1-8 - uncovered.ts | 0 | 0 | 0 | 0 | 1-8 ---------------|---------|----------|---------|---------|------------------- -`; - -exports[`prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test 1`] = ` - console.log - this will print - - at covered (module.ts:13:11) - ---------------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------|---------|----------|---------|---------|------------------- -All files | 50 | 25 | 25 | 50 | - module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 - types.ts | 0 | 0 | 0 | 0 | 1-8 - uncovered.ts | 0 | 0 | 0 | 0 | 1-8 ---------------|---------|----------|---------|---------|------------------- -`; - -exports[`prints correct coverage report, if an ESM module is put under test without transformation 1`] = ` - console.log - this will print - - at covered (module.js:11:11) - ---------------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------|---------|----------|---------|---------|------------------- -All files | 59.38 | 50 | 33.33 | 59.38 | - module.js | 79.17 | 66.67 | 50 | 79.17 | 14-16,19-20 - uncovered.js | 0 | 0 | 0 | 0 | 1-8 ---------------|---------|----------|---------|---------|------------------- -`; - -exports[`prints coverage with empty sourcemaps 1`] = ` -----------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------|---------|----------|---------|---------|------------------- -All files | 100 | 100 | 100 | 100 | - types.ts | 100 | 100 | 100 | 100 | -----------|---------|----------|---------|---------|------------------- -`; From 38d2c32f708172930a934b6425014ff58818619c Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:35:04 +0300 Subject: [PATCH 5/7] test(fix): do not run ESM tests on Node 10 --- e2e/__tests__/coverageProviderV8.test.ts | 63 +++++++++++++----------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/e2e/__tests__/coverageProviderV8.test.ts b/e2e/__tests__/coverageProviderV8.test.ts index 069b23c487f0..5ab1e3a93696 100644 --- a/e2e/__tests__/coverageProviderV8.test.ts +++ b/e2e/__tests__/coverageProviderV8.test.ts @@ -7,6 +7,7 @@ import * as path from 'path'; import wrap from 'jest-snapshot-serializer-raw'; +import {onNodeVersions} from '@jest/test-utils'; import runJest from '../runJest'; const DIR = path.resolve(__dirname, '../coverage-provider-v8'); @@ -63,34 +64,40 @@ test('prints correct coverage report, if a TS module is transpiled by Babel to C expect(wrap(stdout)).toMatchSnapshot(); }); -test('prints correct coverage report, if an ESM module is put under test without transformation', () => { - const sourcemapDir = path.join(DIR, 'esm-native-without-sourcemap'); - - const {stdout, exitCode} = runJest( - sourcemapDir, - ['--coverage', '--coverage-provider', 'v8', '--no-cache'], - { - nodeOptions: '--experimental-vm-modules --no-warnings', - stripAnsi: true, - }, - ); - - expect(exitCode).toBe(0); - expect(wrap(stdout)).toMatchSnapshot(); +// The versions where vm.Module exists and commonjs with "exports" is not broken +onNodeVersions('>=12.16.0', () => { + test('prints correct coverage report, if an ESM module is put under test without transformation', () => { + const sourcemapDir = path.join(DIR, 'esm-native-without-sourcemap'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + { + nodeOptions: '--experimental-vm-modules --no-warnings', + stripAnsi: true, + }, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); + }); }); -test('prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test', () => { - const sourcemapDir = path.join(DIR, 'esm-with-custom-transformer'); - - const {stdout, exitCode} = runJest( - sourcemapDir, - ['--coverage', '--coverage-provider', 'v8', '--no-cache'], - { - nodeOptions: '--experimental-vm-modules --no-warnings', - stripAnsi: true, - }, - ); - - expect(exitCode).toBe(0); - expect(wrap(stdout)).toMatchSnapshot(); +// The versions where vm.Module exists and commonjs with "exports" is not broken +onNodeVersions('>=12.16.0', () => { + test('prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test', () => { + const sourcemapDir = path.join(DIR, 'esm-with-custom-transformer'); + + const {stdout, exitCode} = runJest( + sourcemapDir, + ['--coverage', '--coverage-provider', 'v8', '--no-cache'], + { + nodeOptions: '--experimental-vm-modules --no-warnings', + stripAnsi: true, + }, + ); + + expect(exitCode).toBe(0); + expect(wrap(stdout)).toMatchSnapshot(); + }); }); From 6727a01046378fd4e6e40c2a3b3ae01730d17a43 Mon Sep 17 00:00:00 2001 From: mrazauskas <72159681+mrazauskas@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:56:04 +0300 Subject: [PATCH 6/7] test: fix snapshots --- .../coverageProviderV8.test.ts.snap | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap index 659dcd75a75c..cd91cd2a3ffb 100644 --- a/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap +++ b/e2e/__tests__/__snapshots__/coverageProviderV8.test.ts.snap @@ -1,64 +1,64 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`prints correct coverage report, if a CJS module is put under test without transformation 1`] = ` +exports[`on node >=12.16.0 prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test 1`] = ` console.log this will print - at covered (module.js:11:11) + at covered (module.ts:13:11) --------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s --------------|---------|----------|---------|---------|------------------- -All files | 59.38 | 60 | 50 | 59.38 | - module.js | 79.17 | 75 | 66.67 | 79.17 | 14-16,19-20 - uncovered.js | 0 | 0 | 0 | 0 | 1-8 +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 --------------|---------|----------|---------|---------|------------------- `; -exports[`prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test 1`] = ` +exports[`on node >=12.16.0 prints correct coverage report, if an ESM module is put under test without transformation 1`] = ` console.log this will print - at log (module.ts:13:11) + at covered (module.js:11:11) --------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s --------------|---------|----------|---------|---------|------------------- -All files | 50 | 25 | 25 | 50 | - module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 - types.ts | 0 | 0 | 0 | 0 | 1-8 - uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +All files | 59.38 | 50 | 33.33 | 59.38 | + module.js | 79.17 | 66.67 | 50 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 --------------|---------|----------|---------|---------|------------------- `; -exports[`prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test 1`] = ` +exports[`prints correct coverage report, if a CJS module is put under test without transformation 1`] = ` console.log this will print - at covered (module.ts:13:11) + at covered (module.js:11:11) --------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s --------------|---------|----------|---------|---------|------------------- -All files | 50 | 25 | 25 | 50 | - module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 - types.ts | 0 | 0 | 0 | 0 | 1-8 - uncovered.ts | 0 | 0 | 0 | 0 | 1-8 +All files | 59.38 | 60 | 50 | 59.38 | + module.js | 79.17 | 75 | 66.67 | 79.17 | 14-16,19-20 + uncovered.js | 0 | 0 | 0 | 0 | 1-8 --------------|---------|----------|---------|---------|------------------- `; -exports[`prints correct coverage report, if an ESM module is put under test without transformation 1`] = ` +exports[`prints correct coverage report, if a TS module is transpiled by Babel to CJS and put under test 1`] = ` console.log this will print - at covered (module.js:11:11) + at log (module.ts:13:11) --------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s --------------|---------|----------|---------|---------|------------------- -All files | 59.38 | 50 | 33.33 | 59.38 | - module.js | 79.17 | 66.67 | 50 | 79.17 | 14-16,19-20 - uncovered.js | 0 | 0 | 0 | 0 | 1-8 +All files | 50 | 25 | 25 | 50 | + module.ts | 80.77 | 50 | 50 | 80.77 | 16-18,21-22 + types.ts | 0 | 0 | 0 | 0 | 1-8 + uncovered.ts | 0 | 0 | 0 | 0 | 1-8 --------------|---------|----------|---------|---------|------------------- `; From 6d03a5837c92a850e35e0b3d6365ef2207ecefdb Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 25 Sep 2021 14:38:48 +0200 Subject: [PATCH 7/7] only one onNodeVersions --- e2e/__tests__/coverageProviderV8.test.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/e2e/__tests__/coverageProviderV8.test.ts b/e2e/__tests__/coverageProviderV8.test.ts index 5ab1e3a93696..523ff071f99a 100644 --- a/e2e/__tests__/coverageProviderV8.test.ts +++ b/e2e/__tests__/coverageProviderV8.test.ts @@ -81,10 +81,7 @@ onNodeVersions('>=12.16.0', () => { expect(exitCode).toBe(0); expect(wrap(stdout)).toMatchSnapshot(); }); -}); -// The versions where vm.Module exists and commonjs with "exports" is not broken -onNodeVersions('>=12.16.0', () => { test('prints correct coverage report, if a TS module is transpiled by custom transformer to ESM put under test', () => { const sourcemapDir = path.join(DIR, 'esm-with-custom-transformer');