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

如何测试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);
}
});