Angular ng引导模式在单元测试中失败

Angular ng引导模式在单元测试中失败,angular,ng-bootstrap,Angular,Ng Bootstrap,我面临一个问题,测试线束中的NgbModal未打开。当我尝试在模式服务内打开模式时,会出现问题: @可注入({ providedIn:'根' }) 导出类ModalService{ 构造函数(私有modalService:NgbModal){} /** *打开一个超大的模态对话框 *@param component内容组件 */ openExtraLarge(组件:类型):NgbModalRef{ 返回此.modalService.open(组件,{windowClass:'dark modal

我面临一个问题,测试线束中的NgbModal未打开。当我尝试在模式服务内打开模式时,会出现问题:

@可注入({
providedIn:'根'
})
导出类ModalService{
构造函数(私有modalService:NgbModal){}
/**
*打开一个超大的模态对话框
*@param component内容组件
*/
openExtraLarge(组件:类型):NgbModalRef{
返回此.modalService.open(组件,{windowClass:'dark modal',大小:'xl',居中:true});
}
}
我的测试线束:

description('ModalService',()=>{
let服务:ModalService;
在每个之前(()=>{
configureTestingModule({});
service=TestBed.inject(ModalService);
});
它('应该创建',()=>{
expect(service.toBeTruthy();
});
它('应该在测试中直接打开一个对话框',()=>{
spyOn(服务,“openExtraLarge”);
const myModal=service.openExtraLarge(TestModalComponent);
expect(service.openExtraLarge).tohavebeincall();
expect(myModal).not.toBeUndefined();
});
});
我创建了一个stackblitz示例

我怀疑问题与以下事实有关:组件没有被注入服务中,但测试以静默方式失败(预期未定义的组件不会未定义)


我的问题的根源是什么?

问题是您截获了原始调用,并期望它仍然会返回一些值

spyOn(service, 'openExtraLarge');
这意味着您完全改变了
openExtraLarge
方法的行为。并且它不返回任何内容(
未定义

如果您希望它返回一些东西,您应该告诉spy返回什么,例如:

spyOn(service, 'openExtraLarge').and.returnValue('something');
或者,您可以执行原始方法,但应正确配置测试模块:

@NgModule({
  declarations: [TestModalComponent],
  entryComponents: [TestModalComponent]
})
export class TestModule {}

...
TestBed.configureTestingModule({
  imports: [TestModule, NgbModalModule]
});

...

spyOn(service, 'openExtraLarge').and.callThrough();

这确实是问题所在!当没有提供其他选项时,
和.callThrough()
实际上是“默认”行为,这似乎是错误的。非常感谢您的帮助和forked stackblitz示例。