首页 > 解决方案 > 如何存根从函数返回的对象以处理来自该对象的任何未来方法调用

问题描述

我有一个打字稿应用程序,其中有以下两行代码:

    const obj = await getCredentials(name, role);

    await obj.getPromise();

getCredentials返回类型为Promise<AWS.ChainableTemporaryCredentials>( https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ChainableTemporaryCredentials.html ),因此 obj 的类型为 AWS.ChainableTemporaryCredentials。在编写此代码的单元测试时,我包含了一行console.log(JSON.stringify(obj))并在此字符串(表示 obj 对象)上使用 JSON.parse 为该getCredentials方法创建一个存根。存根如下所示(注意,由于工作场所的机密性,我无法显示该值)。

    const credentialsStub: AWS.ChainableTemporaryCredentials = JSON.parse(
       `actual value replaced`
    );

    const sinonStub = sinon.stub(awsIAM, 'getCredentials');
    sinonStub.resolves(credentialsStub);

但是,当我尝试运行测试时,我收到一个错误,说这obj.getPromise()不是一个函数,我想这是有道理的,因为我用来制作的字符串中没有指定 getPromise() 方法credentialsStub,但它绝对是一个ChainableTemporaryCredentials该类可以使用的方法( https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ChainableTemporaryCredentials.html)。有谁知道如何正确地存根/监视该getPromise方法,或者通常存根/监视本身被存根的返回对象的方法?

标签: typescriptunit-testingsinonstubspy

解决方案


推荐阅读