首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以将TypeScript与“aws-sdk-mock”一起使用吗?

可以将TypeScript与“aws-sdk-mock”一起使用吗?
EN

Stack Overflow用户
提问于 2018-06-22 07:24:52
回答 1查看 2.1K关注 0票数 3

我正在为TypeScript中的一个无服务器应用程序编写单元测试,我想模拟一下AWS SDK。

不幸的是,我还没有找到很多流行的AWS mocking项目的现有类型定义。我特别想使用aws-sdk-mock库,但是没有它的类型定义,我就不能使用它。

从理论上讲,我希望能够做这样的事情:

代码语言:javascript
复制
import 'jest';
import * as sinon from 'sinon';
import * as _ from 'lodash';
import { handler } from '../lib/lambda';
import AWSMock from 'aws-sdk-mock';
import { PutItemInput } from 'aws-sdk/clients/dynamodb';

const mockData: DataType = {
   // ...some fields
};

describe('create data lambda tests', () => {

  afterEach(() => {
    sinon.restore();
    AWSMock.restore();
  });

  it('returns a success response on creation', () => {
    AWSMock.mock('DynamoDB.DocumentClient', 'put', (params: PutItemInput, callback: any) => {
      return callback(null, 'Successful creation');
    });

    const mockGatewayEvent: any = {
      headers: {
        Authorization: // some JWT
      },
      body: _.clone(mockData)
    };

    handler(mockGatewayEvent).then((createdData: DataType) => {
      expect(createdData.id).toBeDefined();
      expect(createdData.id.length).toBeGreaterThan(0);
    }, () => {
      fail('The create request should not have failed');
    });
  });
});
EN

回答 1

Stack Overflow用户

发布于 2018-09-14 10:01:36

下面是我们是如何用jest让它工作的。这将测试一个使用DynamoDB.DocumentClient调用Dynamo的lambda函数。

如果文件名为*.test.ts或*.spec.ts,有关导入aws-sdk-mock ts定义的警告就会消失。

代码语言:javascript
复制
// stubbed.test.ts

// this line needs to come first due to my project's config
jest.mock("aws-sdk");

import * as AWS from "aws-sdk-mock";
import { handler } from "../index";
// these next two are just test data
import { mockDynamoData } from "../__data__/dynamo.data";
import { mockIndexData } from "../__data__/index.data";

describe("Stubbed tests", () => {
  it("should return correct result when Dynamo returns one slice", async () => {
    expect.assertions(2);
    const mockQuery = jest.fn((params: any, cb: any) =>
      cb(null, mockDynamoData.queryOneSlice)
    );
    AWS.mock("DynamoDB.DocumentClient", "query", mockQuery);
    // now all calls to DynamoDB.DocumentClient.query() will return mockDynamoData.queryOneSlice

    const response = await handler(mockIndexData.handlerEvent, null, null);

    expect(mockQuery).toHaveBeenCalled();
    expect(response).toEqual(mockIndexData.successResponseOneSlice);

    AWS.restore("DynamoDB.DocumentClient");
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50978706

复制
相关文章

相似问题

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