1

我在为包含 ng 引导模式的组件设置依赖项时遇到问题。以下代码来自隔离问题的测试项目。提供网站时,该组件可以正常工作并运行,但测试似乎存在依赖性问题。我正在使用 NgbModal 服务来打开和关闭组件内的模式。这是组件的设置:

@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() 没有被导入但它在测试的导入中引起的。感谢您的时间。

4

1 回答 1

1

原来问题不在我的主要组件规范文件中,而是为我的应用程序组件规范文件运行测试的问题。由于该组件用于主应用程序组件,因此它需要在应用程序组件规范文件中具有相同的导入。

于 2018-07-09T18:36:58.927 回答