У меня есть этот сервис:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { environment } from '@environments/environment';
import { Resource } from '../models/resource';
import { ToastrService } from 'ngx-toastr';
@Injectable({
providedIn: 'root',
})
export class DataService<T extends Resource> {
items: BehaviorSubject<T[]>;
constructor(private endpoint: string, private http: HttpClient, private toastr: ToastrService) {
this.items = new BehaviorSubject<T[]>([]);
}
initialize(feedId: number) {
this.http.get<T[]>(`${environment.apiUrl}/feeds/${feedId}/${this.endpoint}`).subscribe(response => {
this.items.next(response);
});
}
get(id: number) {
return this.http.get<T>(`${environment.apiUrl}/${this.endpoint}/${id}`);
}
create(filter: any) {
return this.http.post<T>(`${environment.apiUrl}/${this.endpoint}`, filter).pipe(
map((response: any) => {
const message = response.message;
const item = response.model;
let items = this.items.value;
items.push(item);
this.emit(items, message);
return response.model;
}),
);
}
update(filter: any) {
return this.http.put<T>(`${environment.apiUrl}/${this.endpoint}`, filter).pipe(
map((response: any) => {
const message = response.message;
const item = response.model;
let items = this.items.value;
this.remove(items, filter.id);
items.push(item);
this.emit(items, message);
return response.model;
}),
);
}
delete(id: number) {
this.http.delete<any>(`${environment.apiUrl}/${this.endpoint}/${id}`).subscribe(response => {
let items = this.items.value;
items.forEach((item, i) => {
if (item.id !== id) return;
items.splice(i, 1);
});
this.emit(items, response.message);
});
}
private remove(items: T[], id: number) {
items.forEach((item, i) => {
if (item.id !== id) return;
items.splice(i, 1);
});
}
private emit(items: T[], message: string) {
this.items.next(items);
this.toastr.success(message);
}
}
У которого есть такой тест:
import { TestBed } from '@angular/core/testing';
import { DataService } from './data.service';
import { Resource } from '@models';
describe('DataService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
const service: DataService<Resource> = TestBed.get(DataService);
it('should be created', () => {
expect(service).toBeTruthy();
});
});
Я ожидал бы, что это сработает, но выдает ошибку:
Невозможно вызвать Promise.then из теста синхронизации.
Я рассмотрел другие стеки, но все они связаны с компонентами. Может кто-нибудь объяснить, почему это происходит с моим сервисом?