这是ts代码
handleSave () {
this.save.showModal();
this.gridService
.handleSave(this)
.subscribe((request) => this.saveProgressModalComponent.progress(request));
}
这是茉莉花的代码。
class GridServiceMock {
public dirtySubject : BehaviorSubject<any> = new BehaviorSubject(false);
public gridCellUpdated = false;
public changeHash : any = {};
handleChange(id, data, row, value) {
}
handleSave(gridComponent){
}
}
{ provide : GridService,useClass : GridServiceMock},
it(
'should handle save', () => {
const modalSpy = spyOn(component['saveProgressModalComponent'], 'showModal').and.returnValue(true);
let result;
const gridSpy = spyOn(component['gridService'], 'handleSave').and.callFake(function(component) {
return {
then: (response) => result = response
};
});
component.handleSave();
expect(modalSpy).toHaveBeenCalled();
expect(gridSpy).toHaveBeenCalled();
}
);
错误:
Error: <spyOn> : handleSave() method does not exist
答案 0 :(得分:0)
您的问题是gridService
是私有的。您不能(也不应该)访问私有财产。
您需要做的是提供服务并保存实例:
let gridService: GridService;
providers: [
{
provide: GridService,
useValue: {
handleSave: _ => {}, // or whatever needs to be returned
},
},
beforeEach(()=>{
gridService = fixture.debugElement.injector.get(GridService)
});
现在使用gridService
代替component['gridService']