Javascript 尽管导入了NgbModule.forRoot(),但仍存在使用ng引导元素为Angular testbed设置依赖项的问题
设置包含ng引导模式的组件的依赖项时遇到问题。以下代码来自一个隔离问题的测试项目。当提供网站服务时,组件可以正常工作并运行,但测试似乎存在依赖性问题。我正在使用NgbModal服务打开和关闭组件中的模式。以下是组件的设置:Javascript 尽管导入了NgbModule.forRoot(),但仍存在使用ng引导元素为Angular testbed设置依赖项的问题,javascript,angular,testing,testbed,Javascript,Angular,Testing,Testbed,设置包含ng引导模式的组件的依赖项时遇到问题。以下代码来自一个隔离问题的测试项目。当提供网站服务时,组件可以正常工作并运行,但测试似乎存在依赖性问题。我正在使用NgbModal服务打开和关闭组件中的模式。以下是组件的设置: @Component({ selector: 'app-main-component', templateUrl: './main.component.html', styleUrls: ['./main.component.css'], providers:
@Component({
selector: 'app-main-component',
templateUrl: './main.component.html',
styleUrls: ['./main.component.css'],
providers: [ NgbModal ]
})
export class MainComponent implements OnInit {
constructor(private modalService: NgbModal) { }
下面是在app.module.ts中设置依赖项的位置:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { MainComponent } from './main/main.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
@NgModule({
declarations: [
AppComponent,
MainComponent
],
imports: [
BrowserModule,
NgbModule.forRoot()
],
bootstrap: [AppComponent]
})
测试床的依赖项设置在main.component.ts文件中:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MainComponent ],
imports: [ NgbModule.forRoot(), BrowserModule ],
providers:[ NgbModal ]
})
.compileComponents();
component = TestBed.get(MainComponent);
modalService = TestBed.get(NgbModal);
}));
当我试着运行测试时,它给了我这个错误
Failed: StaticInjectorError(DynamicTestModule)[NgbModal -> NgbModalStack]:
StaticInjectorError(Platform: core)[NgbModal -> NgbModalStack]:
NullInjectorError: No provider for NgbModalStack!
这似乎意味着缺少依赖关系。在主应用程序中出现这样的错误时,似乎通常是由于未导入NgbModule.forRoot()而导致的,但它在测试的导入中。
谢谢你抽出时间 原来问题不在我的主组件规范文件中,而是运行我的应用程序组件规范文件的测试时出现的问题。由于该组件在主应用程序组件中使用,它需要在应用程序组件规范文件中具有相同的导入。尝试模拟
NgbModalStack
并让我知道它是如何运行的。我尝试过为NgbModalStack提供模拟,也尝试过直接提供模拟,但仍然会出现相同的错误。@a.Lynch您尝试过吗导入中的NgbModalModule.forRoot()?