gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:33 24 4
gpt4 key购买 nike

我花了很多时间尝试让基本的 http 测试与 vows 一起工作。

我想我已经遵循了 vows 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 示例来独立运行。我可以让誓言示例独立运行,但无论出于何种原因我都无法将它们组合起来。我真的很感激这里的一些帮助。我一直在努力让这个工作一段时间(包括大量谷歌搜索)。

更新:

显然,在 Alexis Sellier(vows 的创建者)的帮助下,向回调添加一个错误参数可以解决这个问题。

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

我的新问题是为什么在 vows 中使用 http 库时需要错误参数?

最佳答案

在查看了vow的源代码之后,我想我知道为什么了。 Vows 始终确保当您调用 this.callback 时,生成的接收函数的第一个参数始终是一个错误对象。 Vows 通过这些规则解释回调:

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

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

虽然我不能确认以上是正确的,但我的经验是 vows 的异步风格是为了支持 Node 风格的回调(例如 err 作为第一个 arg),以及不符合的第 3 方 npm 模块这个标准将很难测试。

请不要把我的回答当作福音,因为这是我自己的经历。另一个陷阱是,当您在要测试的函数中进行异步操作时 - 除非您提供回调,否则 vows 将无法正确处理它。

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

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

关于http - 使用 Node.js 中的 http.get 库对 vows 进行异步测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6311946/

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