コンポーネントが2つのモジュールの宣言の一部であるため、Angularテストが失敗します。質問する

コンポーネントが2つのモジュールの宣言の一部であるため、Angularテストが失敗します。質問する

Angular 4 でいくつかのテストを作成しています。ユーザーに適切にフォーマットされた json を表示するために PrettyJsonCompont を使用しているコンポーネントがあります。

ng test を実行すると、いくつかのコンポーネント テストが同じメッセージで失敗します。

失敗: 型 PrettyJsonComponent は、PrettyJsonModule と DynamicTestModule の 2 つのモジュールの宣言の一部です。PrettyJsonComponent を、PrettyJsonModule と DynamicTestModule をインポートする上位のモジュールに移動することを検討してください。PrettyJsonComponent をエクスポートしてインクルードする新しい NgModule を作成し、その NgModule を PrettyJsonModule と DynamicTestModule にインポートすることもできます。

私のテストは次のようになります。

import {async, ComponentFixture, TestBed} from '@angular/core/testing';

import {ContentItemModalComponent} from './content-item-modal.component';
import {DialogService} from 'ng2-bootstrap-modal';
import {ContentItemService} from '../services/content-item.service';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {FroalaEditorModule, FroalaViewModule} from 'angular-froala-wysiwyg';
import {HttpModule} from '@angular/http';
import {MainModel} from '../models/main-model';
import {PrettyJsonComponent, PrettyJsonModule} from 'angular2-prettyjson';

describe('ContentItemModalComponent', () => {
  let component: ContentItemModalComponent;
  let fixture: ComponentFixture<ContentItemModalComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        ReactiveFormsModule,
        FormsModule,
        FroalaEditorModule.forRoot(),
        FroalaViewModule.forRoot(),
        HttpModule,
        PrettyJsonModule
      ],
      declarations: [ContentItemModalComponent, PrettyJsonComponent],
      providers: [
        DialogService,
        ContentItemService,
        MainModel
      ],
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ContentItemModalComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should be created', () => {
    expect(component).toBeTruthy();
  });
});

ベストアンサー1

問題は、新しい Angular モジュールを作成することです。そして、その中でconfigureTestingModuleコンポーネントを宣言します。しかし、このコンポーネントは、インポートする で既に宣言されています。1 つのコンポーネントを 2 つのモジュールで宣言することはできず、これがエラーで報告されます。PrettyJsonComponentPrettyJsonModule

修正するには、宣言PrettyJsonComponentから削除するだけですconfigureTestingModule

おすすめ記事