简体   繁体   English

如何使用 jest mock 模拟 aws-sdk,出现错误“配置中缺少区域”

[英]How to mock aws-sdk using jest mock, getting error "Missing region in config"

I am trying to mock aws-sdk in jest .我正在jest地模拟aws-sdk

I have below code in <root>\utils\jest\__mocks__\mock-aws-sdk.js .我在<root>\utils\jest\__mocks__\mock-aws-sdk.js中有以下代码。

const AWS = require('aws-sdk');

jest.mock('aws-sdk', () => ({
  config: {
    update: jest.fn(),
  },
  EventBridge: jest
    .fn()
    .mockImplementation(() => ({
      describeRule: mockDescribeRule,
    })),
  Lambda: jest
    .fn()
    .mockImplementation(() => ({
      invoke: mockInvoke,
    })),
  DynamoDB: jest
    .fn({
      DocumentClient: jest.fn(),
      getItem: jest.fn(),
      batchWrite: jest.fn(),
      batchGetItem: jest.fn(),
    }),
}));

// And the mock implementation 
const mockDescribeRule = jest.fn().mockImplementation((rule) => ({
  Name: rule.Name,
}));
...

With above code I get error when I run the npm run jest:coverage -- -u :使用上面的代码,当我运行npm run jest:coverage -- -u时出现错误:

TypeError: AWS.DynamoDB.DocumentClient is not a constructor

When I add below lines:当我添加以下行时:

AWS.DynamoDB.DocumentClient = jest.fn().mockImplementation(() => ({

}));

I get below error:我收到以下错误:

ConfigError: Missing region in config

I am not sure how can I successfully mock the aws-sdk in node.js我不确定如何在node.js中成功模拟aws-sdk

i think this might work in case you still search for the answer我认为如果您仍在寻找答案,这可能会起作用

jest.mock('aws-sdk', () => ({
      ...jest.mock('aws-sdk'),
      DynamoDB: jest.fn().mockImplementation(() => {
        return {
          DocumentClient: jest.fn(),
          getItem: jest.fn(),
          batchWrite: jest.fn(),
          batchGetItem: jest.fn(),
        };
      }),
    }));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM