2017-06-26 9 views
0

テストフィクスチャに次の構成を使用すると、タグが見つからないという苦情があります。 AppModuleに直接MockSelectionToolComponentを代入するので、実際には、我々はテストモジュールの宣言に、しかし、元のモジュールに追加していない正常に動作しますので、何か他のものでなければならない...angularテストベッドオーバーライドモジュールが動作しない

// Add the imported module to the imports array in beforeEach 
    beforeEach(() => { 
     TestBed.configureTestingModule({ 
      declarations: [MockSelectionToolComponent], 
      imports: [ 

       AppModule 
      ] 
     }).overrideModule(AppModule, { 
      remove: { 
       declarations: [SelectionToolComponent] 
      } 
     }).compileComponents(); 

     fixture = TestBed.createComponent(MappingComponent); 
     component = fixture.componentInstance; 
     fixture.detectChanges(); 
     component.initialiseMap(); 
    }); 

Error: Template parse errors: 'app-selection-tool' is not a known element:

答えて

0

// Add the imported module to the imports array in beforeEach 
beforeEach(() => { 
    TestBed.configureTestingModule({ 
     declarations: [], 
     imports: [ 

      AppModule 
     ] 
    }).overrideModule(AppModule, { 
     remove: { 
       declarations: [SelectionToolComponent] 
      }, 
     add: { 
       declarations: [MockSelectionToolComponent] 
     } 
    }).compileComponents(); 

    fixture = TestBed.createComponent(MappingComponent); 
    component = fixture.componentInstance; 
    fixture.detectChanges(); 
    component.initialiseMap(); 
}); 

幸運な所見はどこにでも記載されています。

0

あなたが述べたように、オーバーライドを直接宣言することはできませんが、連鎖オーバーライドメソッドで行います。 セット構文を使用することもできます。たとえば、ここのコンポーネントでは、モジュールにも適用されます。

TestBed.configureTestingModule({ 
     imports: [RouterTestingModule], 
     declarations: [MockProductCardComponent, ProductListComponent] 
     }) 
     .overrideComponent(ProductListComponent, { 
      set: { 
       providers: [ 
        { provide: ActivatedRoute, useValue: { fragment: Observable.of(fragment) }}, 
        { provide: PageScrollService, useClass: MockPageScrollService } 
       ] 
      } 
     }) 
関連する問題