diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a32bb7c980d..494e36427afb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[jest-mock]` Treat cjs modules as objects so they can be mocked ([#13513](https://github.com/facebook/jest/pull/13513)) + ### Chore & Maintenance - `[@jest/transform]` Update `convert-source-map` ([#13509](https://github.com/facebook/jest/pull/13509)) diff --git a/packages/jest-mock/src/__tests__/index.test.ts b/packages/jest-mock/src/__tests__/index.test.ts index 4d134554108f..39146edd7e30 100644 --- a/packages/jest-mock/src/__tests__/index.test.ts +++ b/packages/jest-mock/src/__tests__/index.test.ts @@ -213,6 +213,20 @@ describe('moduleMocker', () => { expect(mock.enumGetter).toBeDefined(); }); + it('handles custom toString of transpiled modules', () => { + const foo = Object.defineProperties( + {foo: 'bar'}, + { + __esModule: {value: true}, + [Symbol.toStringTag]: {value: 'Module'}, + }, + ); + const mock = moduleMocker.generateFromMetadata( + moduleMocker.getMetadata(foo), + ); + expect(mock.foo).toBeDefined(); + }); + it('mocks ES2015 non-enumerable methods', () => { class ClassFoo { foo() {} diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index b74d14f53f16..4b6a1c82b5cb 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -426,7 +426,7 @@ function getType(ref?: unknown): MockMetadataType | null { return 'function'; } else if (Array.isArray(ref)) { return 'array'; - } else if (typeName === 'Object') { + } else if (typeName === 'Object' || typeName === 'Module') { return 'object'; } else if ( typeName === 'Number' ||