簡體   English   中英

如何用 Jest 模擬 AWS Cognito CognitoIdentityServiceProvider?

[英]How to mock AWS Cognito CognitoIdentityServiceProvider with Jest?

我正在嘗試編寫單元測試,我需要模擬來自認知服務的方法響應 - 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

我想要一個規范,我嘗試將此服務模擬為先決條件


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

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


這給我一個錯誤

AWS.CognitoIdentityServiceProvider is not a constructor

這怎么不能是構造函數呢? 你有什么想法如何嘲笑它嗎?

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

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

        promise() {
          return Promise.resolve(mockResponse);
        }
      }
    }
});

如果我們想使用spyOn模擬特定的 function,這是另一種方法:

const cognotoIdentityServiceProvider = Object.getPrototypeOf(new AWS.CognitoIdentityServiceProvider());
const stub = jest.spyOn(cognotoIdentityServiceProvider, 'adminDeleteUser').mockReturnValue({
  promise: () => Promise.resolve('bob johnson'),
});

希望這會有所幫助

jest.mock("aws-sdk", () => {
      const cognito = { listUsers: jest.fn() };
      return {
        CognitoIdentityServiceProvider: jest.fn(() => cognito),
        config: {
          update: jest.fn(),
        },
      };
    });
const mCognitoIdentityServiceProvider =
  new AWS.CognitoIdentityServiceProvider();
mCognitoIdentityServiceProvider.listUsers.mockImplementationOnce(() => {
      return {
        promise() {
          return Promise.resolve('your mock data');
        },
      };
    });

AWS SDK 用於 JavaScript v3

jest.mock('@aws-sdk/client-cognito-identity-provider', () => {
  return {
    CognitoIdentityProviderClient: class {
      send() {
        return mockCognitoResponseAddGroup
      }

      promise() {
        return Promise.resolve({})
      }
    },
    CreateGroupCommand: class {},
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM