Javascript Sinon存根方法在使用下划线延迟时不再存根

Javascript Sinon存根方法在使用下划线延迟时不再存根,javascript,unit-testing,sinon,Javascript,Unit Testing,Sinon,因此,我正在使用编写javascript单元测试。在代码中调用stubbed方法,并将其包装为delay()。然而,实际的方法被调用,而不是存根。当我不使用delay时,它会按预期工作并调用存根。我在下面提供了一个代码的示例。知道会发生什么吗?我的一个假设是,sinon正在跟踪某个对象的引用以恢复存根,因为我使用了延迟,所以某个对象超出了范围,存根恢复到实际方法 //这是单元测试的代码。 //someObject.someFunction是存根 sinon.stub(someObject,'s

因此,我正在使用编写javascript单元测试。在代码中调用stubbed方法,并将其包装为delay()。然而,实际的方法被调用,而不是存根。当我不使用delay时,它会按预期工作并调用存根。我在下面提供了一个代码的示例。知道会发生什么吗?我的一个假设是,sinon正在跟踪某个对象的引用以恢复存根,因为我使用了延迟,所以某个对象超出了范围,存根恢复到实际方法

//这是单元测试的代码。
//someObject.someFunction是存根
sinon.stub(someObject,'someFunction',function(){
log('stubbed someFunction');
});
execute();
//这些方法是在someObject中定义的
执行:函数(){
_.耽搁(
函数(){
this.someFunction();
},
1000
);
}
//这是从单元测试中调用的,尽管有存根。
//但是,当删除uz.delay()时,会出现存根
//方法被调用。
someFunction:function(){
log('realsomefunction');

}
我也会有同样的猜测:延迟结束时,原始文件会恢复。要么删除延迟,等待延迟结束,要么等待存根在退出单元测试之前“警告”它已经完成(猜测您将拥有的不仅仅是您显示的内容)。@crashmstr,是的,您是正确的,这并不是全部代码。我还使用了qunit.async(),以便它在测试存在之前等待。