を使用しているサービスをテストしようとしていますが、そのBehaviourSubject
方法が正確にはわかりません。これが私のサービスです:
export class ProductService {
private changes$: BehaviorSubject<User[]> = new BehaviorSubject([]);
get products() { return this.changes$.asObservable() as Observable<any>; }
getProducts() {
this.http.get(...)
.subscribe((products) => {
this.changes$.next(products);
}
}
filterById(id: number) {
let products = this.products$.getValue().filter(...);
// Maybe I will have some more filter logic here.
// I want to test that the filter logic is returning the correct product
this.changes$.next(products);
}
...
}
これが私のテストです。サービスのフィルタ ロジックをテストできるようにしたいと考えています。しかし、私はデータをモックしているので、this.product$.getValue()
空になり、フィルターは実行されません。
it('should filter the products and return the correct product)',
inject([ProductService], (service: ProductService) => {
const usersSpy = spyOnProperty(service, 'products', 'get').and.returnValue(Observable.of(mockGetResponse));
service.products.subscribe((res) => {
// How do I continue here?
// the `this.products$.getValue()`
// will not contain any items,
// because I am mocking the data.
service.findByUserId(1);
});
}));