首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jest模拟AWS SDK

使用jest模拟AWS SDK
EN

Stack Overflow用户
提问于 2022-06-22 13:34:12
回答 1查看 545关注 0票数 0

新手呼叫AWS!我编写了一个函数,它在AWS秘密管理器中创建一个secretID,并将一些令牌值存储到其中。这是我的函数create-secret.ts的片段

代码语言:javascript
复制
import * as AWS from 'aws-sdk';

const secretsManager = new AWS.SecretsManager({
  region: process.env.AWS_REGION,
});

// Creates a new secret in the AWS secret manager and stores token value
export const createSecretToken = async (secretId: string,token: string,): Promise<any> ={
  const params = {
    Description: 'Store token',
    Name: secretId,
    SecretString: token,
  };
 try{
   const data = await secretsManager.createSecret(params).promise();
   return data;
  } catch(error){
   return error
  }
};

我从另一个名为“main.ts”的文件调用上述函数。这就是main.ts函数的外观

代码语言:javascript
复制
import {createSecretToken} from './create-secret'

export const handler = async (): Promise<any> => {
  const response = await createSecretToken('testSecret', 'testToken');
  return {
    body: JSON.stringify(response),
  };
};

所有的逻辑都是完美的。但是,我的单元测试没有涵盖在create-secret.ts文件中的catch块中实现的行。

这是我的测试文件creat-cryp.spec.ts

代码语言:javascript
复制
import * as AWS from 'aws-sdk';

import { createSecretToken } from './create-secret';

const response = {
  ARN: 'test',
  Name: 'testName',
  VersionId: 'XXX',
  VersionStages: ['AWSCURRENT'],
};

jest.mock('aws-sdk', () => { <-- I am struggling to modify this mock to cover the 
                             catch block.
  return {
    config: {
      update() {
        return {};
      },
    },
    SecretsManager: jest.fn(() => {
      return {
        createSecret: jest.fn(() => {
          return {
            promise: () => response,
          };
        }),
      };
    }),
  };
});

describe('storeSecrets', () => {
  it('should create a new secret id in secret manager and store admin token  ', async () => {
    const spy = jest.spyOn(AWS, 'SecretsManager');
    const res = await createSecretToken('test', 'test');
    expect(spy).toHaveBeenCalledTimes(1);
    expect(res).toEqual(response);
  });
});

上面的测试通过并覆盖了创建-秘密. test文件中的这个try块

代码语言:javascript
复制
 try{
  const data = await secretsManager.createSecret(params).promise();
  return data;
 }

如何模拟secretsManager.createSecret函数来模拟错误?请帮助我编写一个额外的测试用例,以覆盖create-secret.ts中的这个catch块

代码语言:javascript
复制
catch(error){
   return error
  }

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-06-22 14:01:56

我使用symilar来模拟SQS,它还应该与SecretManager一起工作:

代码语言:javascript
复制
const AWS = require('aws-sdk');

const response = {
  ARN: 'test',
  Name: 'testName',
  VersionId: 'XXX',
  VersionStages: ['AWSCURRENT'],
};

AWS.SecretsManager = jest.fn().mockImplementation(() => ({
  createSecret: jest.fn().mockReturnValue({
    promise: jest.fn().mockResolvedValue(response),
  })
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72716509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档