【问题标题】:How do I initialize two independent objects from same module in node.js/Javascript?如何在 node.js/Javascript 中初始化来自同一模块的两个独立对象?
【发布时间】:2013-06-16 01:49:16
【问题描述】:

我正在为我正在处理的程序编写一些模拟服务器测试用例,但遇到了一个我不熟悉的问题。

这里是简单的休息服务器

var restify = require('restify');
var server = restify.createServer();

var mock = {};
module.exports = mock;
var resp = '';
mock.init = function(name, port,callback) {
    resp = name;
    server.use(restify.bodyParser({
        mapParams: false
    }));

    server.get('/ping', function(req, res, next) {
        res.send(resp);
    });
    server.listen(port, function() {
        console.log('%s listening at %s', server.name, server.url);
        callback(undefined,server.url);
    });
};

我尝试使用以下命令初始化两台服务器:

var should = require('should');

var mock1 = '';
var mock2 = '';

describe('mock riak load balancer', function() {
    it('should configure a mock riak node', function(done) {
        mock1 = require('./mock.js');
        mock1.init('mock1', 2222, function(e, r) {
            done();
        });
    });
    it('should configure a second mock riak node', function(done) {
        mock2 = require('./mock.js');
        mock2.init('mock2', 2223, function(e, r) {
            done();
        });
    });
});

不幸的是,当我 ping mock1 时连接被拒绝,所以它被第二次调用覆盖了。猜测这与 Javascript 处理范围的方式有关,但我不确定。

我求助于这个:https://gist.github.com/hortinstein/5814537 但我认为必须有更好的方法

【问题讨论】:

    标签: javascript node.js module require


    【解决方案1】:

    这与 node.js 加载模块的方式有关。 node.js 在你的进程中缓存了所需的模块,这意味着 mock2 和 mock1 基本上是同一个对象。

    更多信息:

    【讨论】:

    • 很棒的链接,知道如何更好地做我在这里求助的事情(对于我的模拟代码)gist.github.com/hortinstein/5814537
    • 看看rewire,一个用于创建mock的依赖注入模块,真的是mock
    猜你喜欢
    • 2019-03-25
    • 2011-02-15
    • 1970-01-01
    • 2019-04-03
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2013-08-09
    相关资源
    最近更新 更多