Правильный способ тестирования rxjs

Я принес книгу rxjs in action и просто закончить раздел тестирования.

тестирование кодов rxjs отличается от обычного тестирования, потому что все ленивы загрузки.

в книге они упоминают два метода тестирования, либо проходя done (я использую QUnit и done signals async code is finish), либо мраморные диаграммы.

мой вопрос в том, какой метод я должен выбрать, о котором я упоминал выше?

1 ответов


Я получаю этот вопрос много от своих коллег. Я наконец-то добрался до документа мои способы тестирования RxJs в моем блоге. Поскольку ваш вопрос, похоже, связан с RxJs5, я приведу только соответствующую часть моего сообщения здесь.

тестирование в RxJs5 путь RxJs4

когда вы переносите свою кодовую базу с RxJs4 на 5, вы узнаете, что многие вещи были перемещены, переименованы и, прежде всего, что реализация TestScheduler больше не доступен. RxJS contributor kwonoj создал ШИМ совместимости для перехода к RxJs5. Вы можете установить его с помощью npm npm install @kwonoj/rxjs-testscheduler-compat. Не все функции TestScheduler реализованы, но самое главное .startScheduler работает.

const TestScheduler = require('@kwonoj/rxjs-testscheduler-compat').TestScheduler;
const next = require('@kwonoj/rxjs-testscheduler-compat').next;
const complete = require('@kwonoj/rxjs-testscheduler-compat').complete;

it('works in RxJs5 with the compat package', () => {
  const scheduler = new TestScheduler(); // Note; no longer the Rx.TestScheduler

  const results = scheduler.startScheduler(
    () => Rx.Observable.interval(100, scheduler).take(3),
    { created: 100, subscribed: 200, unsubscribed: 1000 } // NOTE: disposed is now renamed to unsubscribed
  );

  collectionAssert.assertEqual(res.messages, [
    next(200 + 100, 0),
    next(200 + 200, 1),
    next(200 + 300, 2),
    complete(200 + 300)
  ]);
});

тестирование в RxJs5 с использованием нового синтаксиса тестирования Marble

команда RxJs представила синтаксис тестирования мрамора чтобы более визуально определить, как ваш оператор или пользовательский код должен работать.

var e1 = hot('----a--^--b-------c--|');
var e2 = hot(  '---d-^--e---------f-----|');
var expected =      '---(be)----c-f-----|';

expectObservable(e1.merge(e2)).toBe(expected);

на момент написания этого поста они еще не сделали этот подход очень прост в использовании, за пределами самой библиотеки RxJs5. Есть реализаций чтобы увидеть, как это сделать самостоятельно. Вы также можете посмотреть вокруг в кодовая база RxJs5 чтобы увидеть, как настроить рамки тестирования, чтобы сделать свои собственные мраморные тесты. Есть открытое вопрос о документировании тестирования с помощью RxJs5. Мне еще не удалось получить свой testing framework setup для тестирования мрамора таким образом.