我正在使用 typescript + jest,并且在创建模拟实现时遇到了一些类型检查问题。举个例子,我想嘲笑Credentials
对象从aws-sdk
:
import { Credentials } from "aws-sdk";
jest.mock("aws-sdk");
const CredentialsMock = mocked(Credentials);
describe("Foo test", () => {
beforeAll(() => {
CredentialsMock.mockImplementation(() => { /*** <--- Type checking fails here ***/
return {
get: jest.fn()
}
});
});
});
我遇到的问题是类型检查器希望我为每个方法/属性提供模拟Credentials
类型,当我只想模拟单个方法时。具体错误是:
TS2345:类型参数 '() => { get: jest.Mock; }' 不可分配给类型为“(accessKeyId: string, SecretAccessKey: string, sessionToken?: string | undefined) => Credentials”的参数。
输入 '{ get: Mock; }' 缺少“Credentials”类型中的以下属性:getPromise、needsRefresh、refresh、refreshPromise 等 5 个属性。
有没有办法让打字稿在这里快乐?
我发现让打字稿满意的一种方法是,当提供与原始参数或返回值不同的模拟实现时,将模拟实例包装在类型断言 https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions。假如说mocked(Credentials)
在你的例子中返回一个jest.MockInstance
,类型断言将如下所示:
(CredentialsMock as jest.MockInstance<any, any>).mockImplementation(() => {
return {
get: jest.fn()
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)