0

作業中のプログラムのモック サーバー テスト ケースをプログラミングしていて、よくわからない問題に遭遇しました。

これが単純な残りのサーバーです

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);
    });
};

そして、次のように2つのサーバーを初期化しようとします:

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();
        });
    });
});

残念ながら、mock1 に ping を実行すると接続が拒否されるため、2 回目の呼び出しで上書きされます。これは、Javascript がスコープを処理する方法と関係があると推測していますが、よくわかりません。

私はこれに頼りました:https://gist.github.com/hortinstein/5814537しかし、もっと良い方法が必要だと思います

4

1 に答える 1

1

これは、node.js がモジュールをロードする方法に関係しています。node.js はプロセスに必要なモジュールをキャッシュします。つまり、mock2 は基本的に mock1 と同じオブジェクトです。

より詳しい情報:

于 2013-06-19T13:48:17.617 に答える