mardi 8 octobre 2019

How to stub node-cache's cache.get()?

I'm writing a unit test for a function that uses node-cache. At the following function,

  1. I want to have a string return at the first cache.get
  2. an array in the second cache.get

Please note that I removed some parts of code from testFunction since it is not relavant to my question.

const NodeCache          = require('node-cache');
const cache              = new NodeCache();
...
const testFunction = () => {
  let myStringCache = cache.get('cacheName1');
  let myArrayCache = cache.get('cacheName2');

   ... Do something with caches ...

   return 'return something';
}

...
module.exports = {
   ...,
   testFunction,
   ...
}

I created the following test

describe('sample test with testFunction() ', ()=>{
  let stubCache;
  let stub;
  before((done)=>{
    sandbox = sinon.createSandbox();
    stubCache = sandbox.stub(cache, 'get');
    stubCache.withArgs('cacheName1').returns('sample string');
    stubCache.withArgs('cacheName2').returns([1,2,3,4,5,6]);
    stub = proxyquire('./filelocation.js',{
      'node-cache': stubCache
    });
    done();
  });

  it('should not throw error',(done)=>{
    chai.expect(stub.testFunction()).not.to.throw;
  });
})

I was Googling around, and there is some partial solution to use proxyquire to stub the value. but looks like it does stub but it's not where I wanted. It stubs at NodeCache but cache

So I have questions:

  1. Does anybody know how to stub cache.get() with mocha, chai or sinon? If so, please share how you do it ?
  2. Is it possible to stub different returns by the argument of cache.get()?

Aucun commentaire:

Enregistrer un commentaire