ตามคำตอบของ Brian Adamsนี่คือวิธีที่ฉันสามารถใช้แนวทางเดียวกันใน TypeScript ยิ่งไปกว่านั้นการใช้jest.doMock ()เป็นไปได้ที่จะจำลองฟังก์ชันโมดูลเฉพาะในการทดสอบบางไฟล์ทดสอบและจัดเตรียมการจำลองการใช้งานสำหรับแต่ละไฟล์
src / module.ts
import * as module from './module';
function foo(): string {
  return `foo${module.bar()}`;
}
function bar(): string {
  return 'bar';
}
export { foo, bar };
ทดสอบ / module.test.ts
import { mockModulePartially } from './helpers';
import * as module from '../src/module';
const { foo } = module;
describe('test suite', () => {
  beforeEach(function() {
    jest.resetModules();
  });
  it('do not mock bar 1', async() => {
    expect(foo()).toEqual('foobar');
  });
  it('mock bar', async() => {
    mockModulePartially('../src/module', () => ({
      bar: jest.fn().mockImplementation(() => 'BAR')
    }));
    const module = await import('../src/module');
    const { foo } = module;
    expect(foo()).toEqual('fooBAR');
  });
  it('do not mock bar 2', async() => {
    expect(foo()).toEqual('foobar');
  });
});
ทดสอบ / helpers.ts
export function mockModulePartially(
  modulePath: string,
  mocksCreator: (originalModule: any) => Record<string, any>
): void {
  const testRelativePath = path.relative(path.dirname(expect.getState().testPath), __dirname);
  const fixedModulePath = path.relative(testRelativePath, modulePath);
  jest.doMock(fixedModulePath, () => {
    const originalModule = jest.requireActual(fixedModulePath);
    return { ...originalModule, ...mocksCreator(originalModule) };
  });
}
ฟังก์ชัน Mocking ของโมดูลจะถูกย้ายไปยังฟังก์ชันตัวช่วยที่mockModulePartiallyอยู่ในไฟล์แยกต่างหากเพื่อให้สามารถใช้งานจากไฟล์ทดสอบต่างๆได้ (ซึ่งโดยทั่วไปแล้วสามารถอยู่ในไดเร็กทอรีอื่น ๆ ได้) มันขึ้นอยู่กับexpect.getState().testPathการแก้ไขพา ธ ไปยังโมดูล ( modulePath) ที่ถูกเยาะเย้ย (ทำให้สัมพันธ์กับhelpers.tsที่มีmockModulePartially) mocksCreatorฟังก์ชั่นส่งผ่านเป็นอาร์กิวเมนต์ที่สองเพื่อmockModulePartiallyควรส่งคืน mocks ของโมดูล ฟังก์ชันนี้ได้รับoriginalModuleและจำลองการใช้งานสามารถเลือกพึ่งพาได้
     
              
otherFnออกเป็นโมดูลแยกต่างหากและเยาะเย้ยสิ่งนั้น