我尝试检查回调,但JEST没有注意到它被调用。
我将其深入研究的非常简单的案例。调用类N的Object对象的方法将调用类D的回调对象d。它发生-我确实看到了输出,但Jest无法识别它。
即我希望选项1和选项2都能通过测试,但实际上只有选项2成功。尽管https://jestjs.io/docs/en/jest-object#jestspyonobject-methodname上的文档说
,但Jest似乎正在检查被调用的名称注意:默认情况下,jest.spyOn还会调用spied方法。
class D{
callback(id){
console.log("called with "+id);
}
}
class N{
constructor(){
this.callback = undefined;
}
callEm(id){
this.callback(id);
}
}
var c = new N();
var d = new D();
c.callback = d.callback;
const spy = jest.spyOn(d, "callback");
c.callEm("crap"); // Option1: leads to test failure but shows print out
//d.callback("crap");// Option2: leads to test success and shows print out
expect(spy).toHaveBeenCalledTimes(1);
答案 0 :(得分:1)
需要更改:
D.prototype
而不是d
c.callback=d.callback
class D{
callback(id){
console.log("called with "+id);
}
}
class N{
constructor(){
this.callback = undefined;
}
callEm(id){
this.callback(id);
}
}
var c = new N();
var d = new D();
const spy = jest.spyOn(D.prototype, "callback");
c.callback = d.callback;
c.callEm("crap");
d.callback("crap");
expect(spy).toHaveBeenCalledTimes(2);
更新:
对于此示例,您甚至可以执行const spy = jest.spyOn(d, "callback");
,但这仅适用于该类的实例。