测试用例在 deno 上泄漏异步操作

2024-01-09

我从 Drash 下载了示例应用程序(https://github.com/drashland/eno-drash https://github.com/drashland/deno-drash)

$ deno run --allow-run --allow-read --allow-write --allow-net https://deno.land/x/drash/create_app.ts --api

并尝试添加一个新测试,其中:

  1. 将获取 GET /
  2. 断言状态代码和响应 json
Deno.test("HomeResource - GET /", async () => {
  const response = await fetch("http://localhost:1557", {
    method: "GET",
  });
  assertEquals(response.status, 200);
  assertEquals(
    await response.json(),
    JSON.stringify({
      success: true,
      message: "GET request received.",
    }),
  );
});

这是错误消息

Server listening: http://localhost:1557
running 5 tests
test HomeResource - GET / ... FAILED (9ms)
test HomeResource - POST / ... ok (2ms)
test HomeResource - PUT / ... ok (2ms)
test HomeResource - DELETE / ... ok (2ms)

Stop the server ... ok (0ms)

failures:

HomeResource - GET /
AssertionError: Test case is leaking async ops.
Before:
  - dispatched: 1
  - completed: 0
After:
  - dispatched: 9
  - completed: 7

Make sure to await all promises returned from Deno APIs before
finishing test case.
    at assert (rt/06_util.js:33:13)
    at asyncOpSanitizer (rt/40_testing.js:44:7)
    at async Object.resourceSanitizer [as fn] (rt/40_testing.js:68:7)
    at async TestRunner.[Symbol.asyncIterator] (rt/40_testing.js:240:13)
    at async Object.runTests (rt/40_testing.js:317:22)

failures:

    HomeResource - GET /

test result: FAILED. 4 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out (15ms)

我尝试取消身体response.body?.cancel(),但表示流已锁定。

Tests: https://github.com/ramonmedeiros/learning_deno/blob/master/tests/resources/home_resource_test.ts https://github.com/ramonmedeiros/learning_deno/blob/master/tests/resources/home_resource_test.ts


测试用例正在泄漏操作和资源。也许 Drash 没有正确处理这个问题。

这些是获取请求之前和之后的资源-

┌───────┬───────────────┐
│ (idx) │    Values     │
├───────┼───────────────┤
│   0   │    "stdin"    │
│   1   │   "stdout"    │
│   2   │   "stderr"    │
│   3   │ "tcpListener" │
└───────┴───────────────┘
┌───────┬───────────────┐
│ (idx) │    Values     │
├───────┼───────────────┤
│   0   │    "stdin"    │
│   1   │   "stdout"    │
│   2   │   "stderr"    │
│   3   │ "tcpListener" │
│   4   │  "tcpStream"  │
└───────┴───────────────┘

这些是获取请求之前和之后的操作 -

┌─────────────────────────┬────────┐
│          (idx)          │ Values │
├─────────────────────────┼────────┤
│      opsDispatched      │   5    │
│    opsDispatchedSync    │   4    │
│   opsDispatchedAsync    │   1    │
│ opsDispatchedAsyncUnref │   0    │
│      opsCompleted       │   4    │
│    opsCompletedSync     │   4    │
│    opsCompletedAsync    │   0    │
│ opsCompletedAsyncUnref  │   0    │
│    bytesSentControl     │  121   │
│      bytesSentData      │   46   │
│      bytesReceived      │  418   │
└─────────────────────────┴────────┘
┌─────────────────────────┬────────┐
│          (idx)          │ Values │
├─────────────────────────┼────────┤
│      opsDispatched      │   14   │
│    opsDispatchedSync    │   6    │
│   opsDispatchedAsync    │   8    │
│ opsDispatchedAsyncUnref │   0    │
│      opsCompleted       │   12   │
│    opsCompletedSync     │   6    │
│    opsCompletedAsync    │   6    │
│ opsCompletedAsyncUnref  │   0    │
│    bytesSentControl     │  323   │
│      bytesSentData      │ 73903  │
│      bytesReceived      │  1060  │
└─────────────────────────┴────────┘

The tcpStream测试后资源未关闭。 请参阅opsDispatchedAsync and opsCompletedAsync。所有异步操作均未完成。 这是如上所述的异步操作和资源清理here https://deno.land/manual/testing#resource-and-async-op-sanitizers。这些默认情况下启用,但可以通过设置禁用sanitizeResources and sanitizeOps to false正如最后一个测试用例中所做的那样 -

Deno.test({
  name: "\b\b\b\b\b     \nStop the server",
  fn() {
    server.close();
  },
  sanitizeResources: false,
  sanitizeOps: false,
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试用例在 deno 上泄漏异步操作 的相关文章

  • rust axum 项目实践 deno js运行时集成

    rust axum使用deno runtime 使用场景 xff1a 例如在创建订单的过程中 订单创建完成之后 需要根据订单的金额 和订单下单数量进行 1 xff1a 增加用户积分 2 xff1a 赠送优惠券 3 xff1a 消息推送 对于
  • Deno推出高性能键值数据库Deno KV

    出品 OSC开源社区 xff08 ID xff1a oschina2013 Deno 团队宣布推出 Deno KV xff0c 并称其是具备强一致性的键值数据库 xff0c 支持在全局范围复制以在全球 35 个地区实现低延迟读取 Deno
  • 如何在 DENO 中使用 npm 模块?

    德诺超级酷 我早上看到了 现在想迁移到 deno 我试图将现有的 Nodejs 脚本移至 deno 任何人都可以帮助我如何在 deno 中使用 npm 模块 我需要 esprima 模块 这个有包https github com denol
  • 如何使用 deno 的 Oak 提供图像?

    Deno 似乎针对文本文件 但我还需要为网站提供图像文件 您可以使用send 功能send 旨在将静态内容作为 中间件功能 在最直接的用法中 根是 提供给该功能的请求得到满足 本地文件系统中相对于根目录的文件 请求的路径 const app
  • 无法创建 deno docker 镜像

    我想创建deno使用 Dockerfile 生成 docker 镜像 FROM alpine latest WORKDIR RUN apk update apk upgrade RUN apk add curl RUN curl fsSL
  • 带扩展名的 TypeScript 导入

    您可能听说过 Deno 它是一个新的 TypeScript 运行时 Deno 和普通 TypeScript 之间的一个主要区别是您必须在 import 语句中包含文件扩展名 例如 import foo from bar ts 我想编写与 D
  • 如何让网络工作者同时执行多项任务?

    我试图让 Web Worker 管理其状态 同时服务多个异步请求 工人 ts 文件 let a 0 this is my worker s state let worker self as unknown as Worker worker
  • Deno 顶级等待

    正在阅读homepage https deno land 新的 JS 运行时 deno 我看到了下面的代码 import serve from https deno land email protected cdn cgi l email
  • Deno 允许所有权限

    我经常发现自己在使用 Deno 时至少输入两到三个权限选项 deno run allow net allow read allow env app ts 有一种方法可以逃避显式权限 您可以使用 allow all或短选项 A允许所有权限 请
  • tsc 编译使用文件扩展名导入的打字稿

    我以独立于生态系统的方式编写打字稿代码 我决定在导入中包含文件扩展名 以匹配 Web 和 Deno import xyz from foo ts 我怎样才能获得打字稿编译器 tsc 编译这些文件不会出现以下错误 error TS2691 A
  • deno 捆绑失败。类型“ReadableStream”上不存在属性“getIterator”

    使用捆绑包运行 deno 失败并出现以下错误 error TS2339 ERROR Property getIterator does not exist on type ReadableStream
  • Node.js Buffer.from(string) 的 Deno 等价物是什么

    如何将字符串转换为缓冲区 我试过 Uint8Array from hello world 但它不起作用 相当于Buffer from Hello World is const encoder new TextEncoder const bu
  • 如何使用 Deno VSCode 扩展进行保存时格式化?

    我正在使用vscode deno https marketplace visualstudio com items itemName denoland vscode deno扩展 尽管我打开了deno enable deno lint an
  • 未捕获的 InvalidData:数据与未标记的枚举 ArgsEnum 的任何变体都不匹配

    我对 Deno 很感兴趣 所以我正在尝试一下 找到了有关构建 REST API 的教程here https blog logrocket com creating your first rest api with deno and post
  • Deno 脚本与 Node.js 兼容吗?

    据我所知 大多数 npm 包由于使用而与 Deno js 不兼容require 至少那些不在de land x https deno land x 但相反的情况可能吗 Deno js 脚本可以在 Node js 项目中使用吗 如果是 那么如
  • 在哪里可以看到 deno 下载的软件包?

    我是新来的deno目前正在探索 deno 的最小可行项目 我想要喜欢 npm 它会下载文件夹内的 npm 包node modules 同样我想看到迪诺包在一个目录中 在我当前的项目中 我没有看到任何下载的包 请建议我在哪里寻找 deno 软
  • 如何在 Deno 中下载大文件?

    我试图下载一个 10GB 的文件 但只有 4GB 保存到磁盘上 而且内存增长了很多 const res await fetch https speed hetzner de 10GB bin const file await Deno op
  • Deno 中子进程如何向父进程发送消息?

    From 这个答案 https stackoverflow com a 62085642 6587634 我知道父进程可以与子进程通信 但是反过来呢 从工人那里你必须使用Worker postMessage https developer
  • deno 安装和 deno 编译之间有什么区别?

    If I do deno help表明 编译 将脚本编译成独立的可执行文件 install 将脚本安装为可执行文件 这两个命令有什么区别 Command Output Self contained 1 Deno runtime integr
  • 使用 Denon 时如何避免权限问题

    我正在运行 denon 它就像节点中的 nodemon 但即使我手动指定了相关标志 特别是 allow net flag 如何使用 Denon 运行我的应用程序 这样我就不必不断重新启动 如果不知道确切的错误 很难给你正确的答案 但是den

随机推荐