Angular 指定给属性的匿名函数的角度测试

Angular 指定给属性的匿名函数的角度测试,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,我需要测试角度组件函数(func1)是否由另一个角度方法内动态实例化的对象的匿名函数属性调用。理解起来有点难,但让我解释一下 我有一个导出的类,它的属性类型为匿名函数。大概是这样的: export class Detail { id: string; name: string; onSave: () => void; } 在我的组件中,我有一个实例化细节类对象的方法,并为调用funFn的onSave属性设置匿名函数 myFunction(item: Item){ con

我需要测试角度组件函数(func1)是否由另一个角度方法内动态实例化的对象的匿名函数属性调用。理解起来有点难,但让我解释一下

我有一个导出的类,它的属性类型为匿名函数。大概是这样的:

export class Detail {
  id: string;
  name: string;
  onSave: () => void;
}
在我的组件中,我有一个实例化细节类对象的方法,并为调用
funFn
onSave
属性设置匿名函数

myFunction(item: Item){
   const detail = new Detail();
   detail.onSave= (){
     this.runFn(item); 
   }
   this.someService.doSomethingWith(details);
}

runFn(item: Item){
   ... do something cool.
}
我想测试在执行
onConfirm
时是否调用了
runFn
。因此,在我的测试案例中,我有:

it("Should calls runFn", function () {
      spyOn(Detail.prototype, 'onSave').and.callThrough();

      const mockItem = new Item();
      component.myFunction(mockItem);

      expect(component.runFn).toHaveBeenCalledWith(mockItem);
});

上面的代码不起作用,因为
onSave
不是一个方法,而是一个属性。因此,我如何模拟在
myFunction
中创建的实例,并测试
runFn
是否已在分配给
onSave

的匿名函数中被调用,而无需监视onSave。但您需要监视component.runFn。但即便如此,由于您从未对myFunction中创建的详细对象执行任何操作,因此其onSave函数也不可能被调用。我简化了演示的代码,但实际上,这段代码使用细节实例作为参数,在函数末尾显示了一个细节弹出模式,当单击该弹出模式的保存按钮时,会执行onSave。您不需要监视onSave。但您需要监视component.runFn。但即便如此,由于您从未对myFunction中创建的详细对象执行任何操作,因此其onSave函数也不可能被调用。我简化了演示的代码,但实际上,此代码在函数末尾显示了一个使用细节实例作为参数的细节弹出模式,当单击该弹出模式的保存按钮时,将执行onSave。