在 Node 中进行回调测试.js生成匿名错误
Vows callback testing in Node.js generating anonymous errors
我对 Node.js 应用程序中使用的异步计算的延续传递风格不熟悉,我正在努力掌握一些相当基本的代码。
我正在尝试编写一个库,该库将创建一个用于 imap.gmail.com 的 imap 接口,并且我正在尝试以"誓言".js"(具有不同程度的成功(遵循 BDD。我绝对没有遵循我应该遵循的完整红>代码>绿循环,但很难以这种方式开始使用语言(。
相关的测试用例如下所示:
var gmail = require('../lib/gmail.js'),
vows = require('vows'),
assert = require('assert'),
fs = require('fs');
vows.describe('Basic interface tests').addBatch({
'A GMailInterface object can': {
topic: function() {
var gm = Object.create(gmail.GMailInterface);
var settings_file = 'test/test_settings.json';
var settings = JSON.parse(fs.readFileSync(settings_file));
var that = this;
gm.connect(settings.email,settings.password,function() {
that.callback(gm); // ERROR BEING GENERATED HERE
});
},
// ACTUAL VOWS OMITTED - the following is just a test of the callback
'find an email' : {
topic: function(gm) {
console.log(">>>",gm);
},
}
}
}).export(module)
如果我在行的正上方写一条控制台.log消息,上面写着"此处生成错误",它将打印出来。如果我在它下面放一条消息,它不会。测试的输出给出以下错误:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Uncaught, unspecified 'error' event.
at EventEmitter.<anonymous> (events.js:50:15)
at EventEmitter.emit (/Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows.js:236:24)
at /Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows/context.js:31:52
at Object.callback (/Users/eblume/Repositories/my_stuff/gmail/node_modules/vows/lib/vows/context.js:46:29)
at Array.0 (/Users/eblume/Repositories/my_stuff/gmail/test/gmail_test.js:17:14)
at EventEmitter._tickCallback (node.js:192:40)
gmail.js中的代码在这里发布有点太多了,但这是我认为是相关部分 - 如果您在下面提问,我可以发布更多内容。
gm.connect = function(username,password,cb) {
var self = this;
self.conn = new ImapConnection({
username: username,
password: password,
host: 'imap.gmail.com',
port: 993,
secure: true
});
async.series([
function(callback){self.conn.connect(callback); },
function(callback){self.conn.openBox('[Gmail]/All Mail',true,callback);}
],
function(err,results) {
if (err) {
die(err);
}
process.nextTick(cb);
});
};
我可能哪里出错了?感谢您的任何帮助!
我建议阅读"this"的工作原理。如果没有人弄乱它,that.callback
的"that"指的是父对象,该父对象用文字字符串标记为"GMailInterface 对象可以"。
我怀疑是这个因素绊倒了你。"回调"应该定义为与"主题"方法相同对象的方法,就像你设置东西的方式一样,这对我来说并不是它的工作方式。
默认情况下,"this"通常是指最近的祖先/父对象。它忽略包装函数,除非它们使用"new"关键字用作构造函数,在这种情况下,它指示对象实例。在 DOM 中的事件回调(浏览器 JS - 不是节点.js就事件而言,我不深入了解(,它通常是指在其上触发事件的对象。
没有真正的混乱被修复和自我。我们只是倾向于使用这些来确保在对象具有聚合对象的情况下,我们正在寻址顶部对象。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- RxJS:在循环中处理错误.js自定义驱动程序
- 如何在快递中抛出 404 错误.js
- 如何捕获服务器错误 JS
- 帆的“500”错误.js“测试项目”
- 快递中的会话未定义错误.js
- jquery.validate 中的错误.js“javaScript 运行时错误:无法获取未定义或空引用的属性'
- 角度动画中的奇怪错误.js
- 如何删除“对象在节点中没有方法'forEach'错误.js”
- 错误 JS 将发布数据发送到控制器 -CodeIgniter
- 使用摩卡在节点上测试错误.js函数
- 为什么 Magento js/varien/form.js IE 中的错误 - js fiddle
- 检测导致冻结等问题的错误 JS
- 三中的错误.js:相机不是三的实例.照相机
- 编译错误js.72.未处理的错误
- PHP停止表单重新加载显示错误Js
- 节点中的套接字挂断错误.js使用 https 时
- 纹理加载错误(JS动画)
- jasmineNodeOpts:执行量角器时出现意外的标识符错误.js