Angular 如何调用方法进行测试而不执行?

Angular 如何调用方法进行测试而不执行?,angular,typescript,unit-testing,service,karma-jasmine,Angular,Typescript,Unit Testing,Service,Karma Jasmine,以下是我的组件: @组件({ 选择器:“应用程序注册”, templateUrl:'./signup.component.html', 样式URL:['./signup.component.scss'] }) 导出类SignUpComponent实现OnInit{ 特殊的:字符串; 建造商( 私有激活路由:激活路由, 私人技术服务:技术服务 ) {} 恩戈尼尼特(){ this.specialLink=this.activatedRoute.snapshot.params.id; if(this

以下是我的组件:

@组件({
选择器:“应用程序注册”,
templateUrl:'./signup.component.html',
样式URL:['./signup.component.scss']
})
导出类SignUpComponent实现OnInit{
特殊的:字符串;
建造商(
私有激活路由:激活路由,
私人技术服务:技术服务
) {}
恩戈尼尼特(){
this.specialLink=this.activatedRoute.snapshot.params.id;
if(this.specialLink!==未定义){
console.log('GOOD1');
此.setSpecialSignup();
console.log('GOOD3');
}
设置特殊注册(){
console.log('GOOD2');
this.techService.getStuff();
}
以下是我的测试:

description('SignUpComponent',()=>{
let组件:注册组件;
let夹具:组件夹具;
让ActivatedRouteMock:任何;
beforeach(异步(()=>{
ActivatedRouteStub={
快照:{
参数:{id:123}
},
};
TechServiceMock=jasmine.createSpyObj('TechService',['getStuff']);
TechServiceMock.getStuff.and.returnValue(新承诺((解析,拒绝)=>{resolve()}));
TestBed.configureTestingModule({
声明:[注册组件],
导入:[RouterTestingModule],
供应商:[
{提供:ActivatedRoute,useValue:ActivatedRouteStub},
{提供:TechService,useValue:TechServiceMock},
]
})
.compileComponents();
}));
在每个之前(()=>{
fixture=TestBed.createComponent(SignUpComponent);
组件=fixture.componentInstance;
});
描述('获得特别注册',()=>{
它('当用户来自特殊链接时,应该调用setSpecialSignup(),()=>{
spyOn(组件“设置特殊注册”);
ActivatedRouteStub.snapshot.params.id=“某些特殊链接”;
fixture.detectChanges();
expect(component.setSpecialSignup).toHaveBeenCalled();//它正在工作
});
它('应呼叫技术服务',()=>{
ActivatedRouteStub.snapshot.params.id=“123”;
fixture.detectChanges();
expect(TechServiceMock.getStuff).tohavebeencall();//它不工作
});
});
我想测试是否调用了techService.getStuff()。该服务正在运行 注册组件中的setSpecialSignup()方法

当我测试这个方法时,它被调用了,但是控制台中的日志告诉我不是这样的(它在没有GOOD2的情况下变为GOOD1和GOOD3,这很奇怪)

也许这是个简单的问题,但对此有什么解释吗? 如何测试是否调用了TechServiceMock.getStuff()? 我尝试了不同的方法来模拟TechService,但其中任何一种都有帮助


我错过了什么?

如果我理解正确,您正在寻找callThrough()方法,您可以在这里阅读更多有关它的内容:

太棒了!这篇文章内容丰富,非常清晰,非常感谢:)