如何订阅和测试 Observable.of rxjs Angular 9
How to subscribe and test Observable.of rxjs Angular 9
我正在尝试测试一个 returns 可观察到 rxjs 的函数,但我无法以任何方式订阅它。 None 我试过的订阅方法有效。
"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
返回的可观察对象的正确语法是什么?现在,使用粘贴的语法(或我尝试过的任何其他方法)我无法获得无错误的订阅方式。
我应该以不同的方式编写测试吗?
我得到的错误是:
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})
给出了同样的错误。
似乎存在一些无法正确推断 return 值的 TypeScript 问题。
要解决此问题,请为 isNameValid
方法明确提供类型定义:
isNameValid(c: AbstractControl): Observable<boolean | { matchError: string }> {
// ...
}
顺便说一句,您可以将对象传递给 subscribe()
,这是完全有效的。
我正在尝试测试一个 returns 可观察到 rxjs 的函数,但我无法以任何方式订阅它。 None 我试过的订阅方法有效。
"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
返回的可观察对象的正确语法是什么?现在,使用粘贴的语法(或我尝试过的任何其他方法)我无法获得无错误的订阅方式。
我应该以不同的方式编写测试吗?
我得到的错误是:
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})
给出了同样的错误。
似乎存在一些无法正确推断 return 值的 TypeScript 问题。
要解决此问题,请为 isNameValid
方法明确提供类型定义:
isNameValid(c: AbstractControl): Observable<boolean | { matchError: string }> {
// ...
}
顺便说一句,您可以将对象传递给 subscribe()
,这是完全有效的。