小编Sto*_*ten的帖子

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

我正在尝试为调用 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
   })
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

类型错误:queryIterator.next 不是函数

在那个日志行上。

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

amazon-dynamodb typescript jestjs

6
推荐指数
1
解决办法
1238
查看次数

ContainerRequestContext 和 HttpServletRequest 是什么关系?它们在 JAX-RS 中是如何链接的?

JAX-RS 过滤器在过滤请求时将 ContainerRequestContext 作为参数,但在实际的服务控制器中,我见过的大多数示例都以 HttpServletRequest 的形式获取它们的上下文,例如

private HttpServletRequest httpServletRequest;

@Context
public void setHttpServletRequest(HttpServletRequest httpServletRequest) {
    this.httpServletRequest = httpServletRequest;
}
Run Code Online (Sandbox Code Playgroud)

有趣的是我可以在过滤器中的 ContainerRequestContext 上设置一个属性

public void filter(ContainerRequestContext context){
    context.setProperty("MyProperty", "theValue");
}
Run Code Online (Sandbox Code Playgroud)

然后通过 HttpServletRequest 在控制器中检索它

@POST
public Response post(Object param){
    if("theValue".equals(httpServletRequest.getProperty("MyProperty"))){
        // This works and evaluates true
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,ContainerRequestContext 和 HttpServletRequest 有什么关系呢?哪个先出现,另一个如何从中创建/更新?

对于 Response 上下文/servletRequest 对象,它是否也都一样?

java rest servlets jax-rs

5
推荐指数
0
解决办法
1103
查看次数

标签 统计

amazon-dynamodb ×1

java ×1

jax-rs ×1

jestjs ×1

rest ×1

servlets ×1

typescript ×1