Как правильно издеваться над вызовами DynamoDB? - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь создать модульный тест для моего приложения 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);
    }

Любое понимание того, где я ошибся, будет высоко ценится!

...