【发布时间】:2019-09-18 15:11:03
【问题描述】:
我正在尝试为调用 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 函数返回。
为了测试测试,我在我的 dynamoDb 查询函数中添加了console.log(await queryIterator.next());。
但是当我尝试运行它时,响应是:
TypeError: queryIterator.next 不是函数
在该日志行上。
所以,很明显mockQueryCall.mockReturnValue(mockQueryIterator); 要么没有做它的工作并返回我的 mockQueryIterator,要么const mockQueryIterator = <jest.Mock<QueryIterator<DataObject>>>QueryIterator; 没有正确地将类型应用于 mockQueryIterator。但我不知道如何解决这些问题。
【问题讨论】:
标签: typescript amazon-dynamodb jestjs