2014-07-24 6 views
6

का उपयोग कर जावास्क्रिप्ट में रेडिस इंटरैक्शन को दबाकर मैं node.js. में काम कर रहा हूं। मेरा ऐप node_redis मॉड्यूल के माध्यम से रेडिस के साथ बातचीत करता है। मैं अपने ऐप के परीक्षण को स्वचालित करने के लिए मोचा और साइनऑन का उपयोग कर रहा हूं। मेरा ऐप ऐसा कुछ दिखता है:साइनऑन

...snip 
var redisClient = redis.createClient(redisPort, redisHost); 
var someValue = redisClient.get("someKey"); 
return someValue; 
.... 

मैं कॉल को redisClient.get() पर स्टब करना चाहता हूं। - ऐसा करने के लिए मैं भी redis.createClient करने के लिए कॉल ठूंठ की जरूरत है() मुझे लगता है कि ... यहाँ अपने परीक्षण कोड है:

... 
var redis = require("redis"); 
var redisClient; 
... 
sinon.stub(redisClient, 'get').returns("someValue"); 
sinon.stub(redis, "createClient").returns(redisClient); 
... 
assert.equal(redis_client_underTest.call_to_redis(), "someValue"); 
... 

परीक्षण AssertionError: false == "someValue"

मैं कैसे बाहर ठूंठ करते redisClient साथ विफल रहता है, या यह भी संभव है?

उत्तर

3

आप क्या कर सकते हैं Proxyquire या Rewire जैसे कुछ का उपयोग करें। मैं उदाहरण के लिए रिवायर का उपयोग करूँगा।

कोड का स्निपेट आप ठूंठ हैं:

var redisClient = redis.createClient(redisPort, redisHost); 
var someValue = redisClient.get("someKey"); 
return someValue; 

फिर अपने परीक्षण में आप rewire उपयोग कर सकते हैं:

var Rewire = require('rewire'); 

var myModule = Rewire("../your/module/to/test.js"); 

var redisMock = { 
    get: sinon.spy(function(something){ 
      return "someValue"; 
     }); 
}; 

myModule.__set__('redisClient', redisMock); 

इस तरह आप अपने redisClient जगह ले ली है सकते हैं और आप के साथ जांच कर सकते हैं जासूस अगर समारोह कहा जाता है।

+0

क्या redisClient चर का खुलासा किया जाना चाहिए? या यह मॉड्यूल में भी निजी चर rewire कर सकते हैं? – Scotty

+1

@ स्कोटी हाँ, यह निजी चर भी रिवायर कर सकता है। :) – Osukaa

+0

खेल परिवर्तक! बहुत बहुत धन्यवाद! : डी – Scotty

संबंधित मुद्दे