【问题标题】:Stubbing instance method using Sinon and Mocha使用 Sinon 和 Mocha 存根实例方法
【发布时间】:2018-06-20 21:49:34
【问题描述】:

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

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

但每当我在测试用例之上运行时,永远不会调用存根方法。 谁能建议我在这里做错了什么?

【问题讨论】:

  • 在您的测试中,您的测试LibClass 是如何连接到您的LibWrapper 的?
  • 您正在 obj 上创建存根,它是 LibClass 的一个实例,但您调用 LibWrapper.getLibs 来创建一个新实例。
  • @Troopers 那么有什么方法可以测试这些场景吗?我一直在绞尽脑汁却找不到任何解决方案。

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


【解决方案1】:

您可以在 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
    })
  })
})

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2018-05-31
    • 2014-04-15
    • 2021-06-10
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多