12
私は角度v4.4.4を使用しています。あるコンポーネントでは、テンプレート内のボタンをクリックすると、リアクティブフォームが有効であると仮定してフォームが保存されます。 (擬似コード)のようなもの:角度 - 反応したフォームをユニットテストで有効にすることを強制する
public onSave(): void {
if (this.myForm.valid) {
this._createFoo();
}
}
private _createFoo(): void {
this._fooService.createItem(this.foo).subscribe(result => {
// stuff happens...
});
}
私はサービスを確認できるように、有効であるために、フォームを強制する必要が関連するユニットテストでは、呼び出されています。このようなもの:
it('should create Foo',() => {
const spy = spyOn(_fooService, 'createItem').and.callThrough();
component.foo = new Foo();
fixture.detectChanges();
const bookButton = fixture.debugElement.query(By.css('#bookButton'));
expect(bookButton !== null).toBeTruthy('missing Book button');
bookButton.triggerEventHandler('click', null);
expect(spy).toHaveBeenCalled();
});
これは、myFormが有効に設定されていないために失敗します。
この特定のケースでは、フォーム内のすべての入力に値を与えたくありません。サービス加入が発生したかどうかを見て確認するだけです。フォームを有効にするにはどうすればいいですか?
この場合、実際にはサービスの単体テストとコンポーネントの単体テストを作成して、別々にする必要があります。コンポーネントテストは有効な値を与え、サブスクリプションをチェックする必要があります。サービステストでは、要求が – FussinHussin
を通過していることを確認する必要があります。この場合、サービスから返される値は無関係です。スパイは、サービスが呼び出されたことを確認するだけです。サービス自体は他の場所でテストされます。 – ebakunin
私は参照してください。値を直接入力したくない特別な理由はありますか?ちょうど時間を節約するために? – FussinHussin