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

我对 sinon 不熟悉并重新布线。我正在尝试检查是否在承诺中调用了私有函数。被调用的私有函数被调用,但 sinon 没有检测到调用。下面是我的代码剪断。


文件.test.js

var fileController = rewire('./file')


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

fileController.__set__('privFunc', stub)

fileController.sampleFunc()

expect(stub).to.be.called

文件.js

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

但是上面的这个片段工作正常。即。直接调用私有函数时


RISEBY
浏览 147回答 1
1回答

白衣染霜花

你otherFile.buildSomeThing是异步的,你需要在检查privFunc存根是否被调用之前等待它。例如:文件.jslet otherFile = require('otherFile')var privFunc = function(data) {}var sampleFunc = function() {    return otherFile.buildSomeThing.then(function(data) {        privFunc(data)    })}module.exports = {sampleFunc}文件.test.jsvar 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;  });});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript