gpt4 book ai didi

typescript - 如何使用 Jest 模拟 DynamoDb Datamapper 返回的 QueryIterator?

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:07 25 4
gpt4 key购买 nike

我正在尝试为调用 DynamoDb 的 TypeScript 类编写单元测试。这是我到目前为止所得到的。

import {DataMapper, QueryIterator} from '@aws/dynamodb-data-mapper';
import DynamoDB = require("aws-sdk/clients/dynamodb");

jest.mock("aws-sdk/clients/dynamodb");
jest.mock("@aws/dynamodb-data-mapper");


describe("queryDynamoDb", () => {
let myRepository = new MyRepository();
const mockQueryCall = jest.fn();

DataMapper.prototype.query = mockQueryCall;

test("queriesDynamoDb", async () => {
const mockQueryIterator = <jest.Mock<QueryIterator<DataObject>>>QueryIterator;
mockQueryIterator.prototype.next.mockReturnValueOnce(getExpectedReturnObjectsValues())
mockQueryCall.mockReturnValue(mockQueryIterator);

let responseObjects = await myRepository.queryDynamoDb(testIdString);

// Validate response Objects
})
});

该方法使用 for...of 循环遍历响应,因此我需要 .next 函数返回。

为了测试测试,我添加了console.log(await queryIterator.next());到我的 dynamoDb 查询函数。

但是当我尝试运行它时,响应是:

TypeError: queryIterator.next is not a function

在该日志行上。

所以,很明显mockQueryCall.mockReturnValue(mockQueryIterator);要么不做它的工作并返回我的 mockQueryIterator,要么 const mockQueryIterator = <jest.Mock<QueryIterator<DataObject>>>QueryIterator;没有正确地将类型应用到 mockQueryIterator。但我不知道如何解决这些问题。

最佳答案

经过反复试验,我想出了一些可行的方法。它模拟了 QueryIterator 的 Symbol.iterator 函数。

import {DataMapper, QueryIterator, StringToAnyObjectMap} from '@aws/dynamodb-data-mapper';
import createMockInstance from 'jest-create-mock-instance';

describe('alert service test', () => {

test('find by user id', async () => {
const mapper = createMockInstance(DataMapper);
const qi: QueryIterator<StringToAnyObjectMap> = createMockInstance(QueryIterator);
// @ts-ignore
qi[Symbol.iterator] = jest.fn(() => [1, 2, 3].values());
mapper.query.mockReturnValue(qi);

// @ts-ignore any query arguments will do
const results = mapper.query();

const resultArray = [];
for await (const o of results) {
resultArray.push(o);
}
expect(resultArray).toEqual([1, 2, 3]);
});
});

关于typescript - 如何使用 Jest 模拟 DynamoDb Datamapper 返回的 QueryIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com