开玩笑的打字稿:模拟不会返回预期的形状

时间:2019-12-13 22:16:29

标签: typescript unit-testing jestjs

我有一个TypeScript文件,正在尝试用Jest模拟。这是文件:

export class Logger {
  log(message) => {console.log(message); }
}

我正在单元测试的类具有Logger作为依赖项,因此我试图创建一个可在其他测试中重用的模拟。这是我的模拟尝试:

export const MockLogger = jest.fn<Logger, any>(() => {
  const mockedObject = {
    log: jest.fn()
  };

  return mockedObject;
});

在我的测试文件中,导入常量并尝试使用它。

import {MyService} from './my-service';
import {MockLogger} from './mock-logger';

describe('...', () => {
  let service: MyService; // depends on Logger

  beforeEach(() => {
    jest.resetAllMocks();
    service = new MyService(MockLogger());
  });
});

但是MockLogger()记录为undefined。我还尝试注入new MockLogger(),它似乎是mockConstructor {}。不知道那是什么;无论哪种方式,.log()都没有要调用的MyService函数。

使用jest@^24.9typescript@^3.6

其他信息

它必须与执行时间有关。如果我在测试本身的开头放置了完全相同的模拟,它将起作用。

认为我明白了

我之前的jest.resetAllMocks()会在有机会使用该模拟之前清除该模拟。

0 个答案:

没有答案