模拟特定的函数重载签名
Posted
技术标签:
【中文标题】模拟特定的函数重载签名【英文标题】:Mocking specific function overload signature 【发布时间】:2021-12-16 04:27:18 【问题描述】:我有以下代码
import readdir from 'fs/promises';
const files: string[] = await readdir('/original/file/path');
我正在尝试测试的内容
import * as fsPromisesModule from "fs/promises";
stub(fsPromisesModule, "readdir").callsFake(async (): Promise<string[]> => ['/test/file/path']);
但我收到以下错误
Type 'Promise<string[]>' is not assignable to type 'Promise<Dirent[]>'.
Type 'string[]' is not assignable to type 'Dirent[]'.
Type 'string' is not assignable to type 'Dirent'.ts(2322)
promises.d.ts
文件包含以下签名
function readdir(
path: PathLike,
options?:
| (ObjectEncodingOptions &
withFileTypes?: false | undefined;
)
| BufferEncoding
| null
): Promise<string[]>;
function readdir(
path: PathLike,
options:
|
encoding: 'buffer';
withFileTypes?: false | undefined;
| 'buffer'
): Promise<Buffer[]>;
function readdir(
path: PathLike,
options?:
| (ObjectEncodingOptions &
withFileTypes?: false | undefined;
)
| BufferEncoding
| null
): Promise<string[] | Buffer[]>;
function readdir(
path: PathLike,
options: ObjectEncodingOptions &
withFileTypes: true;
): Promise<Dirent[]>;
存根中使用了最后一个签名,但我想使用第一个签名。如何告诉 TypeScript 这是我想在测试中使用的签名?
【问题讨论】:
你可以查看我的回答here 【参考方案1】:根据@andreyunugros 链接的答案,以下工作有效;
(stub(fsPromisesModule, "readdir") as unknown as SinonStub<[p: PathLike], Promise<string[]>>).callsFake(async (): Promise<string[]> => (['/file/path/name']);
【讨论】:
以上是关于模拟特定的函数重载签名的主要内容,如果未能解决你的问题,请参考以下文章