[英]How to subscribe and test Observable.of rxjs Angular 9
我正在嘗試測試一個返回 rxjs observable 的函數,但我無法以任何方式訂閱它。 我嘗試過的訂閱方法都不起作用。
"rxjs": "6.5.4","@angular/core": "9.0.1"
我要測試的功能:
isNameValid(c: AbstractControl) {
const searchResult = this.roles.filter((elem: any) => elem.name?.toLowerCase() === c.value?.toLowerCase());
if (searchResult.length > 0) {
c.get('name')?.setErrors({ nameTaken: true });
return of({ matchError: 'nameTaken' });
}
return of(true);
}
測試:
it('should return invalid error if supplied name is taken', () => {
const nameControl = new FormControl(mock[0].name);
const isValid = component.isNameValid(nameControl);
isValid.subscribe
({
next: (result: any) => {
console.log(result);
},
error: (err: any) => {
console.log(err);
},
complete: () => {
console.log('complete');
}
});
});
訂閱isNameValid
返回的 observable 的正確語法是什么? 現在,使用粘貼的語法(或我嘗試過的其他任何東西),我無法獲得無錯誤的訂閱方式。
我應該以不同的方式編寫測試嗎?
我得到的錯誤是:
Expected 2-3 arguments, but got 1.ts(2554)
Observable.d.ts(51, 39): An argument for 'error' was not provided.
我也試過:
isValid.subscribe(response => {console.log(response})
給出了同樣的錯誤。
似乎有一些 TypeScript 問題無法正確推斷返回值。
要解決此問題,請為isNameValid
方法明確提供類型定義:
isNameValid(c: AbstractControl): Observable<boolean | { matchError: string }> {
// ...
}
順便說一句,您可以將對象傳遞給subscribe()
,這是完全有效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.