使用Sinon和Mocha的Stubbing实例方法

时间:2018-01-11 14:19:53

标签: node.js unit-testing mocha sinon chai

我已经为下面的函数编写了测试用例(我遗漏了很多不必要的代码,只提供必要的东西,但如果你需要任何其他信息,请告诉我。)



static getLibs() {
  return new Promise((resolve, reject) => {
    const instance = new LibClass();
    instance.loadLibs().then((libs) => {
      if (!libs) {
        return LibUtils.createLib();
      } else {
        return Promise.resolve([]);
      }
    }).then(resolve).catch((err) => {
      //log stuff here
    })
  })
}

export default class LibClass {
  //constructor
  //method
  createLib() {
    return new Promise(() => {
      //some stuff
    })
  }
}






describe('Library', () => {
  it('should get libs', () => {
    let obj = new LibClass();
    let mstub = sinon.stub(obj, 'loadLibs').returns(Promise.resolve('success'));

    return LibWrapper.getLibs().then((res) => {
      expect(mstub.called);
    }, (err) => {
      //log stuff
    })
  }).catch((exp) => {
    //log stuff
  })
})




但是每当我运行上面的测试用例时,就永远不会调用stub方法。 任何人都可以在这里建议我做错了吗?

1 个答案:

答案 0 :(得分:3)

您可以在LibClass原型上创建存根,而不是在实例上创建存根。如果你这样做,那么你需要在测试后恢复它,这样它就不会污染你的其他测试:

describe('Library', () => {
  let mstub;

  beforeEach(() => {
    mstub = sinon.stub(Libclass.prototype, 'loadLibs').returns(Promise.resolve('success'));
  });

  afterEach(() => {
    mstub.restore()
  });

  it('should get libs', () => {
    let obj = new LibClass();

    return LibWrapper.getLibs().then((res) => {
      expect(mstub.called);
    }, (err) => {
      //log stuff
    })
  })
})