Node.js 응용 프로그램에 사용 된 비동기 계산 스타일을 계속 사용하는 것에 익숙하지 않은데, 상당히 기본적인 코드를 손쉽게 잡으려고 애 쓰고 있습니다.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)
내가 바로 "오류가 여기에 생성되는"으로 라인 위에 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);
});
};
어디서 잘못 될 수 있습니까? 어떤 도움을 주셔서 감사합니다!
앞으로 비슷한 문제가있는 사람들에게 - 저는 단순히 모카 (mocha)로 전환했습니다. 제 생각에는 BDD 테스트 프레임 워크가 훨씬 좋았습니다. 그것은 훨씬 더 간결하고 이해하기 쉬운 오류를 주었고 곧 내 문제를 해결했습니다 (이것은 실제로 다른 기능에서 시작된 연결의 도망자 이벤트 루프였습니다). – eblume