2017-05-21 12 views
0

私は角testing guide次と角度のテストスタブと活字体

私は npm installを行っまで

@Injectable() 
export class ActivatedRouteStub { 
    // ActivatedRoute.params is Observable 
    private subject = new BehaviorSubject(this.testParams); 
    params = this.subject.asObservable(); 

    // Test parameters 
    private _testParams: {}; 
    get testParams() { return this._testParams; } 
    set testParams(params: {}) { 
     this._testParams = params; 
     this.subject.next(params); 
    } 

    // ActivatedRoute.snapshot.params 
    get snapshot() { 
     return { params: this.testParams }; 
    } 
} 

これは、すべての罰金transpilingた

let component: MyComponent; 
let fixture: ComponentFixture<MyComponent>; 
let activatedRoute: ActivatedRouteStub; 

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     declarations: [MyComponent], 
     providers: [ 
      {provide: ActivatedRoute, useClass: ActivatedRouteStub}, 
      {provide: Router, useClass: RouterStub} 
     ] 
    }); 
})); 

beforeEach(() => { 
    fixture = TestBed.createComponent(MyComponent); 
    component = fixture.componentInstance; 
    activatedRoute = fixture.debugElement.injector.get(ActivatedRoute); 
    activatedRoute.testParams = { email: email}; 
    fixture.detectChanges(); // calls ngOnInit 
}); 

を次のように私のテストのいずれかを設定してきましたパッケージを更新する(Angular 4とtypescript)。今度は次のエラーが発生する。

TS2322: Type 'ActivatedRoute' is not assignable to type 'ActivatedRouteStub'. 
    Property 'subject' is missing in type 'ActivatedRoute'. 

TS2339: Property 'parent' does not exist on type 'ActivatedRouteStub'. 

なぜ私は突然これらのエラーが表示されますか?

+0

どのような変更(AngularとTypescriptの以前のバージョンがどれほど古いかによる)については説明できません。しかし、エラーは簡単に修正することができます:a)スタブされたクラスの 'subject'プロパティをpublic変数にする、b)スタブされたクラスに' parent'プロパティを追加する。しかし、私はテストを書くためのより良い方法につまずいています。あなたはスタブされたクラスを取り除き、 'RouterTestingModule'を使うことに目を向けるかもしれません。あなたのテストをより簡単にするために、ちょっと推測してください... –

+0

'Router'と' ActivatedRoute'のために個々のプロバイダを宣言するのではなく、 'import:[RouterTestingModule]'をテストベッドの設定に追加すると、スタブ用塩の穀物で、私はAngular2/Angular4のテストで頭を包んでいる。 –

+0

@ SunilD。 'RouterTestingModule'に' ActivatedRoute'スタブがありません。残念なことに、あなたはまだ手動でモックを強制されます。 https://angular.io/guide/testingを参照してください。 –

答えて

0

問題は、ActivatedRouteクラスを取得し、ActivatedRouteStubに割り当てようとしていることです。修正は次のとおりです:

関連する問題