从未被称为 Sinon Spy

Sinon Spy is never called

我正在测试一个方法 A,它根据条件用不同的参数调用另一个方法 B。所以我想监视 B 以便我可以检查它是否被调用。但是间谍永远不会被召唤。

import parent from '../something.js'
describe('Testing A', () => {
  it('should make proper calls to B', () => {
      var spy = sinon.spy(parent, 'B')
      parent.A()
      expect(spy.calledOnce).to.be.true
  })
})

测试函数 A 就是

export const A = () => {
    B()
}

似乎在测试中,从未调用过B的间谍版本,因为A直接调用了B。如何让A的测试函数调用B的Sinon版本?

对我来说,您的代码不可测试。您应该将被测模块视为黑盒,而不是尝试调整其内部结构。在您的情况下,您正试图监视 something.js 模块内部的方法。

将 B 作为参数传递给 A:

export const A = (B) => {
    B();
}

在那种情况下它是非常容易测试的回调:

import parent from '../something.js'
describe('Testing A', () => {
  it('should make proper calls to B', () => {
      var B = sinon.spy();
      parent.A(B);
      expect(B.calledOnce).to.be.true;
  })
})