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'.
なぜ私は突然これらのエラーが表示されますか?
どのような変更(AngularとTypescriptの以前のバージョンがどれほど古いかによる)については説明できません。しかし、エラーは簡単に修正することができます:a)スタブされたクラスの 'subject'プロパティをpublic変数にする、b)スタブされたクラスに' parent'プロパティを追加する。しかし、私はテストを書くためのより良い方法につまずいています。あなたはスタブされたクラスを取り除き、 'RouterTestingModule'を使うことに目を向けるかもしれません。あなたのテストをより簡単にするために、ちょっと推測してください... –
'Router'と' ActivatedRoute'のために個々のプロバイダを宣言するのではなく、 'import:[RouterTestingModule]'をテストベッドの設定に追加すると、スタブ用塩の穀物で、私はAngular2/Angular4のテストで頭を包んでいる。 –
@ SunilD。 'RouterTestingModule'に' ActivatedRoute'スタブがありません。残念なことに、あなたはまだ手動でモックを強制されます。 https://angular.io/guide/testingを参照してください。 –