[英]Vows callback testing in Node.js generating anonymous errors
我不熟悉Node.js應用程序中使用的異步計算的連續傳遞樣式,並且正在努力掌握一些相當基本的代碼。
我正在嘗試編寫一個庫,該庫將創建一個到imap.gmail.com的imap接口,並且我正在嘗試在BDD中添加“ vows'.js”(成功的程度各不相同。我絕對不會遵循完整的紅色->代碼->我應該是的綠色周期,但是很難以這種語言開始。
相關的測試用例如下所示:
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)
如果我在“ ERROR BEING GENERATED HERE”這一行的正上方寫了console.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);
});
};
我哪里可能出問題了? 謝謝你的幫助!
我建議閱讀有關“此”的工作原理的文章。 如果沒有人搞砸它,那that.callback
引用父對象,該父對象用文字字符串標記為“ GMailInterface對象可以”。
我懷疑這是使您絆倒的因素。 “回調”應定義為與“主題”方法具有相同對象的方法,您可以采用各種方式進行設置,而這並不意味着它的工作方式。
默認情況下,“ this”通常指最近的祖先/父對象。 除非使用'new'關鍵字將其用作構造函數,否則它將忽略包裝函數,在這種情況下,它表示對象實例。 對於DOM中的事件回調(瀏覽器JS-不是我不了解事件的node.js),它通常是指已觸發事件的對象。
沒有真正的糾結固定在那和自我上。 我們只是傾向於使用那些,以確保在對象具有聚合對象的情況下,我們正在處理頂部對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.