Я не знаю, какую версию RxJS вы используете, потому что вы смешиваете прототипные и переносимые операторы, но это похоже на RxJS 5.5.
В RxJS 5.X это немного неуклюже.Вы можете переписать свой тест следующим образом:
import { of } from 'rxjs/observable/of';
import { TestScheduler } from 'rxjs/testing/TestScheduler';
import { assert } from 'chai';
import 'rxjs/add/operator/concat';
import 'rxjs/add/operator/delay';
const scheduler = new TestScheduler((actual, expected) => {
console.log(actual, expected);
return assert.deepEqual(actual, expected);
});
const observable$ = of('a', 'b').concat(of('c', 'd').delay(50, scheduler));
scheduler
.expectObservable(observable$)
.toBe('(ab)-(cd|)');
scheduler.flush();
См. Демонстрацию в режиме реального времени (открытая консоль): https://stackblitz.com/edit/rxjs5-marble-test?file=index.ts
Вы знаете, что этот тест пройден, потому что он не выдает никакой ошибки.Попробуйте изменить любое из задержек или значений next
выбросов, и оно выдаст ошибку.
Также взгляните на этот ответ: Как проверить функцию, которая возвращает наблюдаемое, используя timedинтервалы в rxjs 5?
Однако я настоятельно рекомендую обновить до RxJS 6, потому что это упрощает все с cold
и hot
функциями «создания», где вы можете просто использовать const observable$ = cold('(ab)-(cd|)')
создать ту же последовательность, что и вы с of(...).concat(...)
.
Тестирование в RxJS 6: