Jest测试教程之五:如何在Jest中测试serverless项目


在软件开发的过程中,测试的重要性就不用多说了。下面介绍如何在Jest中测试serverless项目。

Jest

如何测试DynamoDB

安装依赖库

yarn add -D @shelf/jest-dynamodb

更改jest.config.js

默认方式下,进行如下配置:

module.exports = {
    verbose: true,
    preset: '@shelf/jest-dynamodb',
};

但如果项目中已经配置了Jest, preset已经被设置为:

preset: 'ts-jest',

而preset的值不能接受数组,因此需要做些更改才能让ts-jest和@shelf/jest-dynamodb一同工作。具体讨论请参考Stackoverflow

增加jest-dynamodb-config.js

module.exports = {
    tables: [
        {
            TableName: 'student-table',
            KeySchema: [
                {
                    AttributeName: 'PK',
                    KeyType: 'HASH',
                },
            ],
            AttributeDefinitions: [
                {
                    AttributeName: 'PK',
                    AttributeType: 'S',
                },
            ],
            BillingMode: 'PAY_PER_REQUEST',
        },
    ],
};

更新Dynamo.js模块,在其中增加:

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

let options = {};
if (process.env.IS_OFFLINE || process.env.JEST_WORKER_ID) {
    options = {
        region: 'localhost',
        endpoint: 'http://localhost:8000',
        sslEnabled: false,
    };
}

测试读取/写入方法:

const tableName = 'student-table';
const mockData = { PK: '9901', name: 'Lucas', address: '110 Fake Street' };

test('testing Dynamo write', async () => {
    expect.assertions(1);
    try {
        const res = await Dynamo.write(mockData, tableName);
        expect(res).toBe(mockData);
    } catch (error) {
        console.log('error ocurred while doing dynamo write test', error);
    }
});

test('testing dynamo get', async () => {
    expect.assertions(1);
    try {
        const res = await Dynamo.get(mockData.PK, tableName);
        expect(res).toEqual(mockData);
    } catch (error) {
        console.log('error occured while doing dynamo get test', error);
    }
});

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !
  目录