Я пытаюсь понять подписки rxjs, Observables и т. Д., Но это мне чуждо. У меня есть сервис с методом, на который я подписываюсь. Метод выглядит следующим образом:
create(product: any): Observable<any> {
return this.http.post<any>(`${environment.apiUrl}/products`, product).pipe(
map((response: any) => {
this.toastr.success(response.message);
return response.model;
}),
);
}
Затем в моем компоненте есть метод сохранения, и для тестов я хочу получить возвращенную модель. Итак, я сделал это:
onSubmit(): Observable<any> {
this.submitted = true;
if (this.saveForm.invalid) return;
let valid = true;
let categoryId = this.fields[0].categoryId;
let product = {
categoryId: categoryId,
};
this.fields.forEach(field => {
let value = this.f[field.name].value;
if (valid) {
valid = value !== undefined;
}
product[field.name] = value;
});
product['state'] = valid ? 'verified' : 'raw';
var response = new Subject<any>();
this.productService.create(product).subscribe(data => {
response.next(data);
});
return response.asObservable();
}
В моем тесте я написал это:
it('should save a product and remove from range', () => {
let component = spectator.component;
component.onSubmit().subscribe(product => {
expect(product.gtin).toBe(0);
expect(product.state).toBe('verified');
console.log(product);
});
expect(component.range.length).toBe(1);
expect(component.saveForm.controls['gtin'].value).toBe(1);
});
Я предполагаю, что сделал это неправильно. Тест проходит, но я думаю, что это потому, что подписка никогда не достигается. Может кто-нибудь сказать мне, что мне нужно сделать?