1

我想在 QLDB 上做 Jest 测试用例,以尽可能多地覆盖我的代码行。

有什么方法可以在我们的代码覆盖的情况下进行 QLDB 模拟(Jest)

4

2 回答 2

1

实现此目的的一种方法是使用不进行远程调用的本地 QLDB 实例。例如,DynamoDB 具有用于这些目的的本地 DynamoDB:https ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html 。然而,QLDB 目前不支持本地实例。对此的替代方案是使用第三方服务,该服务支持离线开发和测试云服务。其中一项服务是LocalStackhttps ://localstack.cloud/ 。LocalStack目前支持 QLDB API:https ://localstack.cloud/features/ 。

于 2021-11-12T14:19:21.673 回答
0

工作!

目前,这是在 QLDB (Mocking DB) 上进行 Jest 测试的唯一方法。

示例代码 - 参考这篇文章 -

var chai = require('chai');
var qldb = require('amazon-qldb-driver-nodejs');
var sinon = require("sinon");

class VehicleRegistration {
    constructor() {
        var serviceConfigurationOptions = {
            region: "us-east-1",
            httpOptions: {
                maxSockets: 10
            }
        };
        this.qldbDriver = new qldb.QldbDriver("vehicle-registration", serviceConfigurationOptions)
    }

    async getPerson(firstName) {
        return await this.qldbDriver.executeLambda("SELECT * FROM People WHERE FirstName = ?", firstName);
    }
}

describe("VehicleRegistration", () => {
    const sandbox = sinon.createSandbox();
    let vehicleRegistration = new VehicleRegistration();

    it("should return person when calling getPerson()", async () => { 
        const testPersonResult = {"FirstName": "John", "LastName": "Doe"};
        const executeStub = sandbox.stub(vehicleRegistration.qldbDriver, "executeLambda");
        executeStub.returns(Promise.resolve(testPersonResult));

        let result = await vehicleRegistration.getPerson("John");
        chai.assert.equal(result, testPersonResult);
    });
});
于 2022-01-17T13:26:03.630 回答