概要

テスト実行時のCognitoへリクエストを連打するのはあまりよろしくないので、ローカルでの単体テスト時はMock化しました。

ソースコード

aws-sdk-mockなるライブラリあったけど、動作が不安定だったので結局JestでMock化。
promise()関数で戻り値を取得するタイプと、callback関数で戻り値を取得するタイプと2つあるので注意が必要。

import * as AWS from 'aws-sdk';

beforeAll(async () => {   
  jest
      .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminCreateUser')
      .mockImplementation((request) => {
        return {promise: () => 'ok'}
      })
  jest
      .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminAddUserToGroup')
      .mockImplementation((request) => {
        return {promise: () => 'ok'}
      })
  jest
      .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminSetUserPassword')
      .mockImplementation((request, callback) => {
        callback(null, 'ok');
      })
  jest
      .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminSetUserSettings')
      .mockImplementation((request, callback) => {
        callback(null, 'ok');
      })
})

callbackの場合のMockの作り方に悩んだ・・。
Amplifyの裏側のソースコードを読んだら答えがあったので、これもシェアしておきます。
https://github.com/aws-amplify/amplify-js/pull/398/files/f0136c16fb10e58d5a779b96bd50397257340592

AWSSDKの仕様で詰まったら、GithubでSDKのソースコードと見ると答えがあるので参考に。