开玩笑-如何模拟嵌套函数?

时间:2019-08-26 12:33:44

标签: javascript jestjs

我有lib提供的功能(来自NPM的项目依赖项)。此功能的签名类似

function dependency(
  someParam: string,
  callback: (data: string) => void
): void { ... }

此函数已由我的函数(需要测试)以如下方式调用:

async function tested(): Promise<string> {
  return new Promise<string>((resolve): void => dependency('qwerty', resolve));
}

我需要使用Jest测试我的tested函数,但是我想以单元测试的方式对其进行测试,因此我需要模拟dependency的结果。这个示例非常简单,但是实际上,我需要一些其他逻辑来提供来自dependency的不同数据。

监视此函数会通知我它正在被调用,但是我需要模拟实现并完全阻止执行lib的实现

1 个答案:

答案 0 :(得分:0)

这是一个简单的示例,可以帮助您入门:

lib.ts

export function dependency(
  someParam: string,
  callback: (data: string) => void
): void {
  throw new Error('should never get here');
}

code.ts

import { dependency } from './lib';

export async function tested(): Promise<string> {
  return new Promise<string>((resolve): void => dependency('qwerty', resolve));
}

code.test.ts

import * as lib from './lib';
import { tested } from './code';

test('tested', async () => {
  const mock = jest.spyOn(lib, 'dependency');
  mock.mockImplementation((someParam, callback) => {
    callback('mocked result');
  });
  const result = await tested();
  expect(result).toBe('mocked result');  // Success!
})