В Angular 8 у меня есть служба с доступным только для чтения свойством Observable
, порожденным из BehaviorSubject<string>
, который содержит строку, описывающую состояние службы. Также в сервисе есть методы, которые изменяют состояние сервиса.
export class StateService {
private _state = new BehaviorSubject<string>('before');
readonly state$ = this._state.asObservable();
constructor () { }
begin() { this._state.next('during'); }
finish() { this._state.next('after'); }
reset() { this._state.next('before'); }
}
Я хочу написать мраморные тесты в моем наборе Jasmine, чтобы элегантно проверить значение этого наблюдаемого при его изменении.
let scheduler: TestScheduler;
beforeEach(() => {
scheduler = new TestScheduler((actual, expected) => {
expect(actual).toEqual(expected);
});
});
it('should flow states correctly', () => {
scheduler.run(({expectObservable, flush}) => {
const svc = setupSvc(); //Call to a function in the suite that sets up the StateService
svc.begin();
svc.finish();
svc.reset();
flush();
expectObservable(svc.state$).toBe('a-b-c-d', {
a: 'before',
b: 'during',
c: 'after',
d: 'before'
});
});
});
Я пробовал разные комбинации вызова begin
, finish
, reset
и помощника планировщика flush
, но ожидание всегда сообщает только одно начальное значение (a
мрамор) и никаких других.
Чего мне не хватает, чтобы иметь возможность это осуществить? Или мраморы - неправильный способ go о проверке этого?