我正在为我编写的JavaScript模块编写一些单元测试。模块的一部分连接到REDIS数据库。我使用node_redis连接到该数据库。我用Jasmine 2.1编写的测试看起来像这样:
var ModuleService = require('./module-service');
describe("TEST", function() {
var service = new ModuleService();
var options = null;
beforeEach(function() {
options = {
server: '127.0.0.1',
port: 6379
};
});
it('Connect to REDIS', function(done) {
service.connectToRedis(options, function() {
console.log('call back received.');
expect(service.state).toBe('Open');
done();
});
});
});
我的测试执行。服务的状态变量设置为“打开”。但是,在命令行中,它只是坐在那里。我必须按Ctrl + C才能返回命令提示符。如果我删除了测试,则立即对命令提示符进行控制。这让我相信我错误地设置了我的异步内容。为了完整起见,我的connectToRedis
函数如下所示:
var redis = require('redis');
function ModuleService() {
}
ModuleService.prototype.state = 'Not Ready';
ModuleService.prototype.connectToRedis = function(options, callback) {
// Ensure that the options are being passed
if (!options) {
if (callback) {
callback(-1);
}
return;
}
try {
// Attempt to connect to the REDIS server
this.state = 'Connecting to REDIS';
client = redis.createClient(options.port, options.host, null);
this.state = 'Open';
if (callback) {
callback(1);
}
} catch (ex) {
if (callback) {
callback(-1);
}
}
};
module.exports = ModuleService;
我做错了吗?为什么没有控制权返回命令行?
谢谢!
答案 0 :(得分:0)
打开套接字是保持节点进程打开的一件事。测试完成后,您需要断开客户端连接,以允许进程自然退出。