Angular PrimeNg UI 库与 Jasmine DynamicTestModule 冲突

Angular PrimeNg UI library conflict with Jasmine DynamicTestModule

我正在使用 Angular CLI。它使用 WebPack 实现 Karma Jasmine。我有一个包含许多 PrimeNg UI 库 控件的组件。它有 p-dataTable(网格)、p-confirmDialog(删除确认对话框)和一个包含 p 的子组件-对话框 (window)。由于以下原因,我的测试失败了:

Failed: Type Header is part of the declarations of 2 modules: SharedModule and DynamicTestModule! Please consider moving Header to a higher module that imports SharedModule and DynamicTestModule. You can also create a new NgModule that exports and includes Header then import that NgModule in SharedModule and DynamicTestModule.

Header 在 primeng/components/common/shared 中声明,也在 DynamicTestModule 中声明。我没有创建其中任何一个。我该怎么办?

解决了!我从 TestBed.configureTestingModule.

中的声明中删除了页眉和页脚
// ===========================================================================
import { async, ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule, NgForm } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { Http, ConnectionBackend, BaseRequestOptions, Response, ResponseOptions } from '@angular/http';
import { MockBackend } from '@angular/http/testing';
import { Observable } from 'rxjs/Rx';
//
import { DataTableModule } from '../../../../node_modules/primeng/components/datatable/datatable'; //primeng/components/datatable/datatable';
import { DataTable } from '../../../../node_modules/primeng/components/datatable/datatable';
import { Dialog } from '../../../../node_modules/primeng/components/dialog/dialog';
import { ConfirmDialog } from '../../../../node_modules/primeng/components/confirmdialog/confirmdialog';
import { Header, Footer } from '../../../../node_modules/primeng/components/common/shared';
import { ButtonModule } from '../../../../node_modules/primeng/components/button/button';
import { ConfirmationService } from '../../../../node_modules/primeng/components/common/confirmationservice';
//
import { AlertsService } from '../../global/alerts/alerts.service';
import { ProductService } from '../product.service';
import { IProduct, Product } from '../product';
import { ProductGridComponent } from './product-grid.component';
import { ProductDetailWindowComponent } from '../product-detail-window/product-detail-window.component';
import { ConfirmationServiceMock } from '../../public/Testing/ConfirmationService.mock';
//
describe( 'ProductGridComponent', ( ) => {
    let sut: ProductGridComponent;
    let fixture: ComponentFixture<ProductGridComponent>;
    let alertService: AlertsService;
    let productService: ProductService;
    //
    const mockDatum = [
        new Product( 1,'p 1',1,'p 1','p 1',1,1,1,1,true ),
        new Product( 2,'p 2',2,'p 2','p 2',2,2,2,2,false ),
        new Product( 3,'p 3',3,'p 3','p 3',3,3,3,3,true )
    ];
    //
    beforeEach( async( ( ) => {
        TestBed.configureTestingModule(  {
            imports: [ 
                FormsModule,
                DataTableModule,
                ButtonModule,
                BrowserAnimationsModule
            ],
            declarations: [
                ProductGridComponent,
                ProductDetailWindowComponent,
                Dialog,
                ConfirmDialog
            ],
            providers: [
                AlertsService,
                ProductService,
                {
                    provide: Http, useFactory: ( backend: ConnectionBackend, defaultOptions: BaseRequestOptions ) => {
                        return new Http( backend, defaultOptions );
                    }, deps: [MockBackend, BaseRequestOptions]
                },
                { provide: MockBackend, useClass: MockBackend },
                { provide: BaseRequestOptions, useClass: BaseRequestOptions },
                { provide: ConfirmationService, useClass: ConfirmationServiceMock }
            ]
        })
        .compileComponents( );
    }));
    //
    beforeEach( inject( [ProductService, AlertsService],
        ( srvMock: ProductService, srvc: AlertsService ) => {
            productService = srvMock;
            alertService = srvc;
        }
    ) );
    //
    beforeEach( ( ) => {
        fixture = TestBed.createComponent( ProductGridComponent );
        sut = fixture.componentInstance;
        fixture.detectChanges( ); // trigger initial data binding
        fixture.whenStable( );
    } );
    //  Component instantiates
    it( 'should be created ...', ( ) => {
        expect( sut ).toBeTruthy( );
    } );
    //
} );
// ===========================================================================