この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS公式ブログでも言及されています。
使い方
clientの応答をモックしたり、client自体がspyになるので、受け取った値をあとで教えてくれたりします。
import { DynamoDBDocumentClient, GetCommand } from '@aws-sdk/lib-dynamodb';
import { mockClient } from 'aws-sdk-client-mock';
const documentMockClient = mockClient(DynamoDBDocumentClient);
beforeEach(() => {
documentMockClient.reset();
});
test('GetCommandをモックする', async () => {
// モックの応答
documentMockClient.on(GetCommand).resolves({
Item: {
deviceId: 'test-deviceId',
createdAt: 1643679540259,
updatedAt: 1643679540259,
},
});
// テスト対象の処理を実行する
await myHandler();
// 使われたGetCommandインスタンスの配列を取り出す
const callsOfGet = documentMockClient.commandCalls(GetCommand);
expect(callsOfGet.length).toBe(1);
// 1回目の呼び出しの1個目の引数を取り出す
expect(callsOfGet[0].args[0].input).toEqual({
TableName: 'TEST_TABLE',
Item: {
deviceId: 'test-deviceId',
updatedAt: expect.any(Number),
createdAt: expect.any(Number),
},
});
});
AWS SDKのモックがこんなにシュッと書けたら幸せですよね!
ClientとCommandのクラスを差し替えれば他のサービスでも同じように書けます。
詳細な使い方はREADMEを参考にしてみてください。
以上でした!