【问题标题】:How to mock aws-sdk using jest mock, getting error "Missing region in config"如何使用 jest mock 模拟 aws-sdk,出现错误“配置中缺少区域”
【发布时间】:2022-09-30 00:39:45
【问题描述】:

我试图在jest 中模拟aws-sdk

我在<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,
}));
...

使用上面的代码,当我运行npm run jest:coverage -- -u 时出现错误:

TypeError: AWS.DynamoDB.DocumentClient is not a constructor

当我添加以下行时:

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

}));

我得到以下错误:

ConfigError: Missing region in config

我不确定如何在node.js 中成功模拟aws-sdk

    标签: javascript node.js unit-testing jestjs aws-sdk


    【解决方案1】:

    我认为如果您仍在寻找答案,这可能会起作用

    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(),
            };
          }),
        }));
    

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 1970-01-01
      • 2018-04-11
      • 2021-01-02
      • 2021-06-01
      • 2015-11-05
      • 2015-11-20
      • 2020-08-13
      • 2018-03-02
      相关资源
      最近更新 更多