簡體   English   中英

斷言函數調用時,chai spy無法識別Sinn存根函數

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

我有兩個異步函數返回bluebird的promise:

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

在我的測試用例中,我想檢查Bar.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,所以我想知道為什么間諜無法接聽它?

我無法解決此問題,因為在實現中,我不得不將回調傳遞給僅測試使用的控制器。 從這里我可以使用回調來測試代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM