【发布时间】:2019-02-21 20:24:55
【问题描述】:
考虑我们有一些方法的类。我们想监视方法 B 是否被调用,而一旦执行方法 A 将返回结果给调用者,方法 B 将异步执行。该类如下所示。
class Parent {
constructor() {
this.conf = [{ id:'1', func: Parent.methodA.bind(Parent)}, { id:'2', func: Parent.methodB.bind(Parent)}]
}
static methodA() {
console.log('methodA is called from methodC');
return 'methodA';
}
static methodB() {
console.log('methodB is called from methodC');
return 'methodB';
}
methodC(conf) {
conf.forEach((eachConf) => {
if(eachConf.id === '1') {
setImmediate(() => {
// Just to call method with conf = [{ id:'2', func: this.methodB.bind(this)}]
this.methodC(conf.slice(1));
})
return eachConf.func();
}
return eachConf.func();
});
}
}
module.exports = Parent;
在 jest 测试文件中,调用 methodC 并希望确保 methodA 具有返回值并希望确保 methodB 也被调用。 testSpy.js const Parent = require('./parent');
it('check methodA and methodB called', async () => {
const methodA = jest.spyOn(Parent, 'methodA');
const methodB = jest.spyOn(Parent, 'methodB');
const instance = new Parent();
instance.methodC(instance.conf);
expect(methodA).toHaveBeenCalled();
//How to spyOn methodB.
//expect(methodB).toHaveBeenCalled();
});
返回结果后可以运行多个方法。想要确保所有的都被执行,最好也能得到每一步的结果。
【问题讨论】:
标签: jestjs