如何使用 Jest 模拟 AWS Cognito CognitoIdentityServiceProvider?

eud*_*nia 4 amazon-web-services node.js express jestjs amazon-cognito

我正在尝试编写单元测试,其中我需要模拟来自 Cognito 服务的方法的响应 - CognitoIdentityServiceProvider

我有以下工作代码调用该adminInitiateAuth操作

import * from AWS from 'aws-sdk'


const cognito = new AWS.CognitoIdentityServiceProvider();
const response = await cognito.adminInitiateAuth(expectedParams).promise();

// main functionality I want to test

Run Code Online (Sandbox Code Playgroud)

我想要一个规范,我尝试模拟此服务作为先决条件


const mockResponse = {
  AuthenticationResult: {
    AccessToken: 'expected-token'
  }
}

jest.mock('aws-sdk', () => {
    return {
      CognitoIdentityServiceProvider: {
        adminInitiateAuth: () => {
          return mockResponse;
        }
      }
    }
});


Run Code Online (Sandbox Code Playgroud)

这给我返回一个错误

AWS.CognitoIdentityServiceProvider is not a constructor

这怎么不能是一个构造函数呢?你有什么想法如何嘲笑它吗?

eud*_*nia 7

我想到了。它可能对某人有用

jest.mock('aws-sdk', () => {
    return {
      CognitoIdentityServiceProvider: class {
        adminInitiateAuth() {
          return this;
        }

        promise() {
          return Promise.resolve(mockResponse);
        }
      }
    }
});
Run Code Online (Sandbox Code Playgroud)