2013-06-19 51 views
0

我正在爲我正在編寫的程序編寫一些模擬服務器測試用例,並且遇到了我不熟悉的問題。如何在node.js/Javascript中初始化來自同一模塊的兩個獨立對象?

下面是簡單的REST服務器

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

不幸的是我得到的,當我平mock1,所以它是由覆蓋一個連接被拒絕第二個電話。猜測這與Javascript處理範圍的方式有關,但我不確定。

我使出這個:https://gist.github.com/hortinstein/5814537,但我認爲必須有一個更好的辦法

回答

1

它與方式做Node.js的負載模塊。 node.js在你的進程中緩存了所需的模塊,這意味着mock2與mock1基本上是相同的對象。

更多信息:

+0

很大的聯繫,任何想法如何更好地做什麼,我都使出這裏(我的模擬代碼)https://開頭要點。 github.com/hortinstein/5814537 – Hortinstein

+0

看看[rewire](https://npmjs.org/package/rewire),一個用於創建mock的依賴注入模塊,它們真的是mocks – hereandnow78