- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我花了很多时间尝试让基本的 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 通过这些规则解释回调:
如果您的原始回调的第一个参数是 bool 值,则使用它来确定是否将错误对象附加到接收回调(例如 path.exists(boolean)
将改为发出 callback(error, exists)
)
如果第一个参数是一个对象,则假定它是一个错误对象并使用它来确定是将原始回调添加到“错误”列表还是“成功”列表。我猜这个列表存在的原因是为了支持基于 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/
我有一个如下的测试文件: // Dependencies var Vows = require("vows") , Request = require("request") , Assert
我在将父 topic 值传递给子 topic 值时遇到问题。该代码是异步的,我认为这就是我遇到问题的地方。我希望 JSON 响应的一部分成为下面测试的主题。这是测试的相关部分。 { "A test
我有一个 express 服务器,我正在使用 vows 进行测试。我想从 vows 测试套件中运行服务器,这样我就不需要让它在后台运行以使测试套件工作,然后我可以创建一个运行服务器并对其进行测试的蛋糕
我希望我的誓言能够从我的主题访问 outerDocs 和 innerDocs,但它没有。 'ASYNC TOPIC': { topic: function() { aModel.find(
我一直在使用 node 并使用 vows 编写测试。 var vows = require('vows'); var assert = require('assert'); var boardData
我花了一些时间在 NodeJS 测试套件中调试一个奇怪的无限循环问题。它只在极少数情况下发生,但我可以在附加到 chrome 调试器时重现它。 我认为这与 V8 对 stack traces in e
来自誓言网站:“当调用 this.callback 时,它将收到的参数一一传递给测试函数,就好像这些值是由主题函数本身返回的一样。”换句话说,如果我们使用请求库来处理我们的 http 请求,我们的主题
我正在使用 Vows.js 测试一些在数据库中创建记录的 node.js。结果,它在数据库中创建了一些测试记录。测试运行后,我想删除这些记录。有没有办法在 Vows 中运行一批测试时运行清理功能? 最
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试为我的普通 Express 应用程序编写一些基于 Vows 的测试。 这是测试源: var vows = require('vows'); var assert = require('ass
假设我有以下序列: vows.describe('Example').addBatch({ 'An example' : { topic: new Example(),
对于整个 node.js 社区来说都是新手,我在我的第一个应用程序上进行单元测试时遇到了问题。问题是它们通过了,但它们实际上从未在回调中运行断言。据我了解, Mongoose (我用来与 MongoD
Vows 有一个 run() 方法,可以在 Node 下运行测试,而无需使用 vows 命令。 在 https://github.com/cloudhead/vows/blob/master/lib/
我正在尝试决定是否为大型 Node 应用程序从 Vows 切换到 Mocha。 我享受了几乎所有的 Vows 体验 - 但争论的传递有点奇怪。我总是不得不挠头来记住主题是如何工作的,这会干扰编写测试的
我目前正在 Node/amqp 应用程序中使用 Q promise 库。我读过 Q 与 BlueBird 或 Vow 等库的性能……不太好。 不幸的是,我不知道如何使用 BlueBird(或 Vow)
在测试我在 node.js 中创建的 RESTful api 时,我真的可以接受一些建议。那里有太多的框架,我不知所措。我的测试知识通常不够好,这就是我尝试编写这些测试的原因。我试过 vows.js,
我对 Node.js 测试完全陌生,也许你可以帮助我:我想使用誓言和托比为我的 Express Web 应用程序做一些或多或少的简单测试(例如测试登录路由是否有效) var vows = requ
我在如何使用 Vows 正确构建 Promise-returning API 测试方面遇到了困难,例如 topic:function() { return myfunc() { /* returns
我花了很多时间尝试让基本的 http 测试与 vows 一起工作。 我想我已经遵循了 vows http://vowsjs.org/#-writing-asynchronous-tests 中的异步示
我正在尝试开始使用 Vows和 Vows-BDD .不幸的是,回调让我绊倒了。 在下面这个非常简单的例子中,如何修复这个错误? ** Inside the first context ** Creat
我是一名优秀的程序员,十分优秀!