为了账号安全,请及时绑定邮箱和手机立即绑定

sinon没有检测到在promise内部调用的私有函数

sinon没有检测到在promise内部调用的私有函数

RISEBY 2021-08-20 17:25:02
我对 sinon 不熟悉并重新布线。我正在尝试检查是否在承诺中调用了私有函数。被调用的私有函数被调用,但 sinon 没有检测到调用。下面是我的代码剪断。文件.test.jsvar fileController = rewire('./file')var stub = sinon.stub().returns("abc")fileController.__set__('privFunc', stub)fileController.sampleFunc()expect(stub).to.be.called文件.jslet otherFile = require('otherFile')var privFunc = function(data) {}var sampleFunc = function() {    otherFile.buildSomeThing.then(function(data) {        privFunc(data)    })}module.exports = {sampleFunc}在上面截取的代码中,privFunc 实际上是被调用的,即。存根被调用,但 sinon 没有检测到调用。var privFunc = function(data) {}var sampleFunc = function() {    privFunc(data)}module.exports = {sampleFunc}但是上面的这个片段工作正常。即。直接调用私有函数时
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

你otherFile.buildSomeThing是异步的,你需要在检查privFunc存根是否被调用之前等待它。


例如:


文件.js


let otherFile = require('otherFile')


var privFunc = function(data) {


}


var sampleFunc = function() {

    return otherFile.buildSomeThing.then(function(data) {

        privFunc(data)

    })

}


module.exports = {sampleFunc}

文件.test.js


var fileController = rewire('./file')


var stub = sinon.stub().returns("abc")

fileController.__set__('privFunc', stub)

fileController.sampleFunc().then(() => {

  expect(stub).to.have.been.called;

});

如果你使用 mocha,你可以使用这样的东西:


describe('file.js test cases', () => {

  let stub, reset;

  let fileController = rewire('./file');


  beforeEach(() => {

    stub = sinon.stub().returns("abc");

    reset = fileController.__set__('privFunc', stub);

  });


  afterEach(() => {

    reset();

  });


  it('sampleFunc calls privFunc', async () => {

    await fileController.sampleFunc();

    expect(stub).to.have.been.called;

  });

});


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信