使用 Node.js 中的 http.get 库进行异步测试

2023-11-30

我正在努力尝试进行基本的 http 测试来处理誓言。

我想我已经遵循了誓言中的异步示例http://vowsjs.org/#-writing-asynchronous-tests并替换适当的电话,但我一定错过了一些东西。

测试代码如下所示:

var http = require('http'),
    vows = require('vows'),
    assert = require('assert');

vows.describe("homepage").addBatch({
  "Get the home page": {
    topic: function() {
      http.get({'host': "127.0.0.1", 'port': 5000, 'path': '/'}, this.callback);
    },
    'should respond with 200 OK': function(res) {
      assert.equal(res.statusCode, 200);
    }
  }
}).export(module);

当我尝试为此运行测试时,出现以下错误:

/Users/<home_folder>/node_modules/vows/lib/vows.js:80
rrored', { type: 'promise', error: err.stack || err.message || JSON.stringify(
                                                                    ^
TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at EventEmitter.<anonymous> (/Users/<home_folder>/node_modules/vows/lib/vows.js:80:90)
    at EventEmitter.emit (events.js:64:17)
    at /Users/<home_folder>/node_modules/vows/lib/vows/context.js:31:52
    at ClientRequest.<anonymous> (/Users/<home_folder>/node_modules/vows/lib/vows/context.js:46:29)
    at ClientRequest.g (events.js:143:14)
    at ClientRequest.emit (events.js:64:17)
    at HTTPParser.onIncoming (http.js:1349:9)
    at HTTPParser.onHeadersComplete (http.js:108:31)
    at Socket.ondata (http.js:1226:22)

我可以得到一个简单的 http 示例来独立工作。我可以让誓言示例单独工作,但无论出于何种原因我都无法将它们结合起来。我真的很感激这里的一些帮助。我已经尝试让它工作一段时间了(包括大量谷歌搜索)。

UPDATE:

显然,在回调中添加错误参数可以解决这个问题,这要归功于 Alexis Sellier(誓言的创建者)的帮助。

但我不知道为什么。当自己编写 http lib 示例时,不需要错误参数。我在誓言中找不到任何文档来说明为什么需要它,所以我有点不知所措。

我的新问题是为什么在誓言中使用 http lib 时需要 error 参数?


在检查了誓言的源代码之后,我想我知道为什么了。誓言始终确保当您致电时this.callback,生成的接收器函数的第一个参数始终是错误对象。 Vows 按以下规则解释回调:

  1. 如果原始回调的第一个参数是布尔值,请使用它来确定是否将错误对象附加到接收回调(例如path.exists(boolean)会发出callback(error, exists)反而)

  2. 如果第一个参数是一个对象,则假设它是一个错误对象,并使用它来确定是否将原始回调添加到“错误”或“成功”列表中。我猜这个列表存在的原因是为了支持基于承诺的测试?

虽然我无法确认上述内容是否正确,但我的经验是,Vows 的异步样式是为了支持节点样式的回调(例如 err 作为第一个参数),并且不符合此标准的第 3 方 npm 模块将很难测试。

请不要把我的回答当成福音,因为这是我自己的经历。另一个问题是当您想要测试的函数内部有异步操作时 - 除非您提供回调,否则誓言将无法正确处理它。

就我个人而言,我认为誓言仍然使测试异步代码变得困难。我希望它有一些waitFor() or until()虽然有流量控制功能。

我的建议?处理异步代码时,使用Step。不要让誓言控制你的心流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Node.js 中的 http.get 库进行异步测试 的相关文章

  • 在同一迭代中过滤和映射

    我有一个简单的情况 我想过滤并映射到相同的值 如下所示 const files results filter function r return r file map function r return r file 为了节省代码行并提高性
  • DiscordJS中如何在没有缓存的情况下获取语音频道中的用户?

    我正在尝试让所有用户连接到我的服务器上的语音通道 当有人与机器人交谈时 general 我想让用户进去Voice Channel 1 我正在使用 Node 17 和 DiscordJS 13 这是我的代码 message guild cha
  • 读取 GetResponseStream() 的最佳方式是什么?

    从 GetResponseStream 读取 HTTP 响应的最佳方法是什么 目前我正在使用以下方法 Using SReader As StreamReader New StreamReader HttpRes GetResponseStr
  • 从项目中的任何位置获取socket.io名称空间

    在我的 REST 调用和一些数据库插入之后 我想通过 socket io 向前端发出一个新的通知 如下所示 socket broadcast emit send notification notification 由于我执行此操作的函数是通
  • 找不到模块“node-sass”时出现错误

    配置 macOS High Sierra 版本 10 13 2 节点 v8 1 2 npm 5 0 3 当我在 angularjs 项目中运行 npm start 时 出现以下错误 ERROR in Cannot find module n
  • IFormFile 未由 dropzone uploadMultiple 请求填充

    我遇到的问题是 IFormFile 列表没有填充给定的文件 但是当我调用 HttpContext Request Form Files 时然后我就可以访问这些文件了 我更喜欢使用 IFormFile 因为它似乎是新的 Dotnet core
  • ExpressJS & Websocket & 会话共享

    我正在尝试制作一个基于 Node js 的聊天应用程序 我想强制 websocket 服务器 ws 库 使用 ExpressJS 会话系统 不幸的是 我被困住了 用于获取会话数据的 MemoryStore 哈希值与 cookie 中的会话
  • Nodejs 在路由器页面中包含 socket.io

    我有一个 Express Node 应用程序 并且我试图通过不在 app js 中包含所有 socket io 内容来保持代码整洁 我不知道解决这个问题的最佳方法 这是我最初的想法 感觉不是最干净的 app js var express r
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • 如何以非root用户身份运行node.js?

    我正在运行一个 node js 服务器 它将服务端口 80 上的请求等 显然 这需要应用程序以 root 身份运行 在 Linux 上 正在看这个帖子 http syskall com dont run node dot js as roo
  • golang中默认的HTTP拨号超时值

    我正在运行 golang http 客户端来对服务器进行压力测试 有时我会收到错误 拨号 tcp 161 170 xx xxx 80 操作超时 错误 我认为这是 HTTP 客户端超时 我正在考虑增加超时值https stackoverflo
  • 在 grails 中编写代理

    我正在使用 Gralis 1 3 7 我正在编写一个控制器 需要从另一台服务器获取 PDF 文件并将其返回给客户端 我想以某种相当有效的方式来做到这一点 例如 class DocController def view URL source
  • 解密签名并验证 JWT

    我知道还有其他库可以让我更轻松地使用 JWT 在 Node js 中 在本例中 我使用 crypto js 以手动方式学习 JWT 以下给了我令牌 var header alg HS256 typ JWT var wordArrayHead
  • 跳过测试文件 Jest 中的一项测试

    我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
  • AWS EB 部署节点应用程序:无法运行 npm install

    我正在尝试将我的节点应用程序部署到 AWS 它甚至不允许我部署应用程序 仍然是Sample Application 使用 eb 部署 Version 64 位 Amazon Linux 2016 09 v4 0 1 运行 Node js 日
  • 如何在 ASP.NET MVC 中获取参数数组作为 GET / POST?

    如何最好地获取数组 item gt value 对作为 GET POST 参数 在 PHP 中 我可以这样做 网址 这得到的参数为 Array a gt Array one gt 100 two gt 200 有什么方法可以在 ASP NE
  • 如何获取与 Node.js 中的 TypeScript 文件行数相关的错误信息?

    我正在使用 TypeScript 进行 Node js 后端开发 每当我在 node js 中遇到错误时 它都会显示与已转译的 JavaScript js 文件相关的行号 而不是与 TypeScript ts 文件相关的行号 如果您使用了
  • 使用 package.json 一起运行节点服务器和 webpack

    我通过学习此视频完成了待办事项应用程序 超级 MEAN 堆栈教程 Angular Node Express Webpack MongoDB SASS Babel ES6 Bootstrap https www youtube com wat
  • EJS - 包含返回找不到包含文件“header.ejs”

    我尝试像这样用 ejs 渲染 html const ejs require ejs fs require fs str fs readFileSync dirname mail templates test ejs utf8 console
  • Node.js:将 repl 挂接到远程节点服务器

    假设我有一个节点服务器在 mysite com 上运行 有没有办法设置该服务器以便我可以使用节点的repl api http nodejs org docs latest api repl html to securely从我的本地计算机连

随机推荐