【发布时间】:2021-06-21 12:24:43
【问题描述】:
我正在对模块中定义的方法进行单元测试,该方法本身调用在第二个模块中定义的依赖项。我想使用 Sinon 包为被测方法对依赖项的调用设置一个间谍。我怎么做?我看过Sinon关于模拟模块依赖的页面(see here),并且过去能够成功使用它。但在这种情况下,我的测试代码(见下文)仍在调用原始方法,而不是 spy。
仅供参考,如果我将 Sinon stub 分配给方法,而不是 Sinon spy,则确实会调用存根方法,正如预期的那样。我不知道为什么我可以存根,但在这种情况下不能间谍。
在这种情况下,使用stub 就可以满足我的目的。但是我很好奇为什么我不能像过去那样在这里使用spy。
谢谢。
我的代码
combo-test.js(测试文件)
const { tape } = require('tape')
const sinon = require('sinon')
const { myCombo } = require('./lib/ow/combo')
const { ComboDropdown } = require('../../../lib/ow/combo-dropdown')
const comboObject = myCombo(props)// Instantiate object to expose method-under-test.
sinon.spy(ComboDropdown.prototype, 'extMethod')// Mock call to external method with a spy.
// sinon.stub(ComboDropdown.prototype, 'extMethod')
comboObj.myMethod()// Prints to console: 555
combo.js(定义被测方法)
const { ComboDropdown } = require('./combo-dropdown')
class Combo extends myClass {
constructor(props) {
}
myMethod() {// method-under-test
this.dropdown = new ComboDropdown({
})
this.dropdown.extMethod()//Calls external method.
}
}
const myCombo = props => new Combo(props)
module.exports = { myCombo }
combo-dropdown.js(定义外部方法)
class ComboDropdown extends Dropdown {
constructor(props) {
super(props)
}
extMethod() {
console.log(555)
}
}
module.exports = {
ComboDropdown
}
【问题讨论】:
标签: javascript unit-testing sinon stub