Возможна проверка одного наблюдаемого атрибута в сервисе из компонента - PullRequest
0 голосов
/ 09 июля 2019

Я не знаю, возможно ли это, что я хочу сделать, у меня есть один компонент FiltersComponent и один Сервис FiltersService. В FiltersService у меня есть один атрибут onFilterChange типа BehaviorSubject. Я выставляю его как asObservable, и я хочу проверить, когда я применил изменение, которое бросает это наблюдаемое.

FilterService.service.ts

export class FilterService {
    private _onFilterChange$: BehaviorSubject<any>;
    constructor() {}

    get onFilterChange(): any {
        return this._onFilterChange$.asObservable;
    }

    public onApplyFilter(filter) {
        this._onFilterChange$.next(filter);
    }
}
FilterComponent

export class FiltersComponent implements OnInit, OnDestroy {
    filterForm: FormGroup;
    constructor(private _filterService: FilterService){}

    onApplyFilter() {
        const pfilter = this.filterForm.getRawValue();

        this._filterService.onApplyFilter(newF);
    }
}


Как я могу проверить, когда я применяю фильтр

this._filterService.onApplyFilter(newF);

this._filterService.onFilterChange().subscribe(d => {
    respond the same filter that I apllied 
});

1 Ответ

0 голосов
/ 10 июля 2019

Из тегов вашего вопроса я мог видеть, что вы используете jasmine-marbles для проверки наблюдаемых. Если это так, то вы должны настроить ваш FilterService так:

export class FilterService {

    private _onFilterChange$: BehaviorSubject<any> = new BehaviorSubject<any>(null);
    constructor() {}

    get onFilterChange(): Observable<any> {
        return this._onFilterChange$.asObservable();
    }

    public onApplyFilter(filter) {
        this._onFilterChange$.next(filter);
    }
}

Для юнит-теста, FilterService, иметь следующий код в filter.service.spec.ts файле:

import { TestBed } from '@angular/core/testing';
import {cold} from 'jasmine-marbles';
import { FilterService } from './filter.service';

describe('FilterService', () => {
  beforeEach(() => TestBed.configureTestingModule({}));

  it('should be created', () => {
    const service: FilterService = TestBed.get(FilterService);
    const expected = cold('a', {a: 2});
    service.onApplyFilter(2);
    const p = service.onFilterChange;
    expect(p).toBeObservable(expected);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...