w.b*_*ian 7 typescript jestjs ts-jest
我正在使用 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()
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当Credentials
我只想模拟单个方法时,类型检查器希望我为该类型的每个方法/属性提供模拟。具体错误是:
TS2345:类型参数 '() => { get: jest.Mock; }' 不可分配给类型为“(accessKeyId: string, SecretAccessKey: string, sessionToken?: string | undefined) => Credentials”的参数。
输入 '{ get: Mock; }' 缺少“Credentials”类型中的以下属性:getPromise、needsRefresh、refresh、refreshPromise 等 5 个属性。
有没有办法让打字稿在这里快乐?
我发现,当提供参数或返回值与原始值不同的模拟实现时,让打字稿满意的一种方法是将模拟实例包装在类型断言中。假设mocked(Credentials)
在您的示例中返回 a jest.MockInstance
,类型断言将如下所示:
(CredentialsMock as jest.MockInstance<any, any>).mockImplementation(() => {
return {
get: jest.fn()
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5462 次 |
最近记录: |