12
我正在使用Angular v4.4.4。在組件中,在模板中單擊按鈕後,表單將保存,假定反應形式有效。類似的信息(僞代碼):Angular - 強制在單元測試中使用反應形式
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