当断言函数调用时,chaispy不能识别Sinon存根函数

Sinon stubbed function is not recognised by chai spy when asserting function call

本文关键字:识别 Sinon 存根 函数 不能 chaispy 断言 函数调用      更新时间:2023-09-26

我有两个异步函数返回蓝鸟承诺:

Async1: function() {
  return new Promise(function(resolve, reject) {
    execute(query)
      .then(function(resp) {
      resolve(resp);
    })
      .catch(function(err) {
      reject(err);
    });
  });
}
Async2: function() {
  return new Promise(function(resolve, reject) {
    execute(query2)
      .then(function(resp) {
      resolve(resp);
    })
      .catch(function(err) {
      reject(err);
    });
  });
}

我有另一个模块调用这些方法,像这样:

module.exports = Foo {
  Bar: require(./'Bar');
  caller: function() {
    this.Bar.Async1()
      .then(function(resp) {
        this.Bar.Async2()
         .then(function(resp) {
          // do something
      }.bind(this))
   }.bind(this))
  }
}

在我的测试用例中,我想检查栏是否。Async2被调用,我有以下失败的测试用例:

it('should call Foo.Bar.Async2', function(done) {
var spy;
  sinon.stub(Foo.Bar, 'Async1').returns(
    new Promise(function(resolve) {
      resolve();
    })
  );
  sinon.stub(Foo.Bar, 'Async2').returns(
    new Promise(function(resolve) {
      resolve();
    })
  );
  spy = chai.spy.on(Foo.Bar, 'Async2');
  Foo.caller();
  expect(spy).to.be.called();
  done();
});

我从控制台日志中知道Async2确实被调用,所以我想知道为什么间谍不把它捡起来?

我无法解决这个问题,因为在实现中我不得不将回调传递给只有测试使用的控制器。从这里我可以使用回调来测试代码。