当前位置:  开发笔记 > 编程语言 > 正文

测试rxjs的正确方法

如何解决《测试rxjs的正确方法》经验,为你挑选了1个好方法。

我带了这本书rxjs in action,刚刚完成测试部分.

测试rxjs代码与通常的测试不同,因为一切都是延迟加载.

在书中,他们提到了两种测试方法,要么传递完成(我使用的是QUnit,完成信号,异步代码完成)或大理石图.

我的问题是,我应该选择哪种方法,我上面提到过?



1> Mark van Str..:

我从同事那里得到了很多这个问题.我终于开始记录我在博客上测试RxJ的方法.由于你的问题似乎与RxJs5有关,我只会在这里引用我的帖子的相关部分.

在RxJs5中测试RxJs4方式

当您将代码库从RxJs4迁移到5时,您会发现很多东西已被移动,重命名,最重要的是TestScheduler的实现不再可用.RxJs贡献者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)
  ]);
});

使用新的Marble测试语法在RxJs5中进行测试

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记录测试的公开问题.我还没有成功地将我的测试框架设置为以这种方式进行大理石测试.


@zero_coding同意。我的印象是,在单元测试方面,RxJS成为其自身实现复杂性的受害者。测试promise非常简单,对于异步/等待来说一样,只是一个简单的.then(done)。但是可观察的东西几乎是所有东西的抽象...这使得单元测试变得如此模糊...
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有