哪里可以找到使用rxjs进行mable测试的冷热运算符

时间:2018-04-05 15:11:59

标签: javascript rxjs

我正在尝试使用rxjs进行单元测试。我在rxjs github上找到了这个文档。

https://github.com/ReactiveX/rxjs/blob/master/doc/writing-marble-tests.md

但是,我没有成功找到hotcold运营商。在哪里可以找到它?如果有人有一个例子,我会很高兴。

2 个答案:

答案 0 :(得分:0)

您使用什么框架进行测试?如果您使用jasmine,则会有一个名为jasmine-marbles的npm包,这可能就是您要搜索的内容。还有另一个名为rxjs-marbles的包,它提供了大理石测试的实用程序。
您可以在此处查看jasmine-marbles的示例:https://github.com/ngrx/platform/blob/master/docs/effects/testing.md
这里有一个rxjs-marbleshttps://www.npmjs.com/package/rxjs-marbles

答案 1 :(得分:0)

在提出问题时,请使用文档was scarce。但是后来又进行了更新,增加了使用TestScheduler编写测试的功能,并且它是新的run()方法。

因此,基于新的documentation,建议使用TestScheduler.run(callback)方法进行大理石测试。例如

import { TestScheduler } from 'rxjs/testing';

const testScheduler = new TestScheduler((actual, expected) => {
  // asserting the two objects are equal
  // e.g. using chai.
  expect(actual).deep.equal(expected);
});

// This test will actually run *synchronously*
it('generate the stream correctly', () => {
  testScheduler.run(helpers => {
    const { cold, expectObservable, expectSubscriptions } = helpers;
    const e1 =  cold('-a--b--c---|');
    const subs =     '^----------!';
    const expected = '-a-----c---|';

    expectObservable(e1.pipe(throttleTime(3, testScheduler))).toBe(expected);
    expectSubscriptions(e1.subscriptions).toBe(subs);
  });
});

在此示例中,当调用run方法时,应将callback对象作为接收参数传递helpers函数。 helpers对象包含您需要的所有内容(以及hotcold运算符):

testScheduler.run(helpers => {
  const { cold, hot, expectObservable, expectSubscriptions, flush } = helpers;
  // use them
});

有关更多信息,请阅读official docs