Я пытаюсь создать модульный тест для моего приложения nodeJS, которое использует AWS SDK для выполнения вызовов в DynamoDB.В тесте ниже я пытаюсь смоделировать вызов putItem в DynamoDB, но когда я запускаю тест, он пытается вызвать AWS.
import AWSMock from 'aws-sdk-mock'
...
it('Can create an item', mochaAsync(async () => {
AWSMock.mock('DynamoDB', 'putItem', (params: Certification, callback: any) => {
console.log('Returning certification content from mock');
let temp: Certification = Object.create(certification);
temp.id = uuid();
return callback(null, temp);
});
let res: Certification = await service.upsert(certification);
expect(res.id).empty.false;
expect(res.name).to.eql(certification.name);
expect(res.description).to.not.eql(certification.description);
expect(res.dateIssued).to.eql(certification.dateIssued);
expect(res.dateExpires).to.eql(certification.dateExpires);
expect(res.image).to.eql(certification.image);
}));
Код тестируется, полный контекст см. https://github.com/bkimbrou/resume-backend:
public upsert(event: Certification, context: any = {}) : Promise<Certification> {
return new Promise<Certification>(() => this.putItem(event));
}
...
protected putItem(item: T) {
if (!item.id) {
item.id = uuid()
}
let params: AWS.DynamoDB.PutItemInput = {
Item: AbstractDynamoService.jsonToItem(item),
TableName: this.tableName
};
this.dynamo.putItem(params, AbstractDynamoService.handleResult);
}
Любое понимание того, где я ошибся, будет высоко ценится!