【问题标题】:Unit test SQS receiveMessage with Jest使用 Jest 对 SQS receiveMessage 进行单元测试
【发布时间】:2020-12-28 02:17:01
【问题描述】:

在弄清楚如何对此进行单元测试时遇到了麻烦,我接近但无法完全解决它。

函数如下:

 receiveMessage(callback: Function): any {
    this.sqs.receiveMessage(
      this.params,
      (err: AWSError, data: ReceiveMessageResult) => callback(err, data)
    );
  }

在测试中,我设置了初始 AWS 模拟并在测试中覆盖它:

jest.mock('aws-sdk', () => {
  const SQSMocked = {
    receiveMessage: jest.fn().mockReturnThis()
  };
  return {
    SQS: jest.fn(() => SQSMocked),
    config: {
      update: jest.fn(() => {
        return { region: getConfig().region };
      })
    }
  };
});

const sqs = new AWS.SQS({
  region: 'us-east-1'
});

那么实际的测试就到这里了。我认为我在覆盖 aws sdk 上的 receiveMessage 时出错了。

  it('checks the callback is called', (done) => {
    const callback = (err: AWSError, data: ReceiveMessageResult) => {
      console.log('called');
      done();
    };

    // how to call the callback on the mock???
    sqs.receiveMessage = jest.fn().mockReturnValue(callback);

    sqsQueue.receiveMessage(callback);

    expect(callback).toHaveBeenCalled();
  });

我尝试了许多覆盖 aws sdk 的组合,大多数时候是打字错误,但似乎不太明白如何模拟函数回调。

有什么想法吗?

【问题讨论】:

  • 你是如何初始化this.sqs的?请提供最少、完整的代码

标签: typescript unit-testing jestjs aws-sdk aws-cli


【解决方案1】:

我改了main函数,提取了回调接口:

  receiveMessage(callback: SqsCallback): void {
    this.sqs.receiveMessage(this.params, callback);
  }

现在测试只检查回调是否被调用:

  it('should call the callback', (done) => {
    const callback: SqsCallback = jest.fn(
      (err: AWSError, data: ReceiveMessageResult) => {
        done();
      }
    );
    const receiveMessageMock = jest.fn((expectedConfig, sqsCallback) => {
      return sqsCallback();
    });
    // @ts-ignore
    sqs.receiveMessage = receiveMessageMock;

    sqsQueue.receiveMessage(callback);
  });

我无法避免 TS 类型检查,因此不得不将 ts-ignore 置于模拟之上。

第一次尝试时很难理解这个概念,但几天后就明白了:)

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2020-11-12
    • 1970-01-01
    • 2019-05-16
    • 2021-09-16
    • 2017-08-23
    • 1970-01-01
    • 2021-08-08
    • 2020-08-12
    相关资源
    最近更新 更多