如何使用TypeScript和jest.requireActual()(带命名导出)?

j2cgzkjk  于 2022-12-05  发布在  TypeScript
关注(0)|答案(1)|浏览(118)

我有一个名为functions.ts的简单文件,其中包含:

export const log = console.log.bind(console);

__mocks__/functions.ts中还有一个jest Mock,借用自Jest requireActual()文档:

const originalModule = jest.requireActual("./functions");

// Quiet functions.log() during tests
export default {
  __esModule: true, // Use it when dealing with esModules
  ...originalModule,
  log: jest.fn(),
};

我希望使log()函数无用,即函数不做任何事情(人们习惯于称之为no-op)。

import { runMe } from "./stackoverflow";

jest.mock("./src/backend/functions");

test(`pass, but make sure it doesn't log error messages`, () => {
  runMe();
  expect(true).toBeTruthy();
});

实际运行的函数:

import { log } from "./src/backend/functions";

export const runMe = () => {
  console.log(`log is:`, log);
  log(`Hello`);
};

console.log(`log is:`, log);

返回log is: undefined
如果我删除jest.mock("./src/backend/functions");,一切都工作得很完美(但仍然是日志)。

**如何使用TypeScript和jest.requireActual()?**这样,当我运行runMe()的测试时,它们将是安静的(但也是为了使funtions中的其他函数仍然正常工作)?

yfwxisqw

yfwxisqw1#

我最终不得不手动导出每个命名的导出,以确保log()被模拟,但functions中的其他所有内容都工作。
__mocks__/functions.ts中:

const actualFunctions = jest.requireActual("../functions");

// Mock this
export const log = jest.fn();

// Use actual implementation of everything else
export const sleep = actualFunctions.sleep;
export const stringify = actualFunctions.stringify;
export const hexToUtf8 = actualFunctions.hexToUtf8;
export const instructionDataToNote = actualFunctions.instructionDataToNote;

它不会像使用解构那样自动更新,但似乎这是唯一的方法。

相关问题