测试rxjs的正确方法

2023-11-24

我把书带来了“rxjs 在行动”并完成测试部分。

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

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

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


我经常从同事那里得到这个问题。我终于抽出时间来记录我在博客上测试 RxJ 的方法。由于您的问题似乎与 RxJs5 有关,我只会在这里引用我的帖子的相关部分。

以 RxJs4 方式在 RxJs5 中进行测试

当您将代码库从 RxJs4 迁移到 5 时,您会发现很多内容已被移动、重命名,最重要的是 TestScheduler 的实现不再可用。 RxJs 贡献者 kwonoj 创建了一个兼容性 shim 帮助迁移到 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 记录测试的问题。我还没有成功地让我的测试框架设置以这种方式进行弹珠测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试rxjs的正确方法 的相关文章

  • 我如何能够以两行显示标题,并且每行的字体大小不同?

    我正在使用 Google Chart API 创建时间线图 并希望将图的标题修改为两行 问题 我如何能够显示具有不同字体大小的两线图表标题 电流输出 理想输出 相关研究 我唯一能找到的是有人试图用饼图来做到这一点 但我尝试了但无法使其发挥作
  • 使用 jquery 远程图像属性

    目前我正在尝试获取远程图像宽度 高度 我正在开发一个链接共享模块 就像当你在 Facebook 上粘贴链接时 你可以看到标题 描述和图像 所以我尝试使用 php getimagesize 来获取图像宽度 高度 但速度非常慢 所以我正在考虑使
  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0

随机推荐

  • 新的 Android 12+ MaterialSwitch 和 androidx.preference

    所以我正在更新我的应用程序以完全支持 Monet 和 Material You 指南 官方网站提到开关的新设计 我用了一下 结果是这样的 我有一个使用 Androidx 首选项库的首选项屏幕 在撰写本文时提供了最新版本 我发现对开关进行主题
  • 使用 Spring Security 记录登录

    我想记录我的网络应用程序中的每次登录 我能够访问通过以下方式进行的登录UsernamePasswordAuthenticationFilter但我不知道如何记录使用记住我功能登录的用户 我尝试覆盖 createSuccessfulAuthe
  • 如何用 jquery 中使用的另一个字符替换“美元”符号?

    如何将 jquery 中使用的美元符号 jquery 的别名 更改为另一个字符 例如 id css height 210px 我想将其更改为 id css height 210px 你无法改变 to 因为 不是有效的标识符 但你可以将其更改
  • 即使设置了权限也无法写入 Android 外部存储

    在我使用 Xamarin Forms 的 Android 10 0 Q 应用程序中 我已在清单中正确设置
  • 在 Linux 上如何通过名称而不是 PID 来终止进程? [复制]

    这个问题在这里已经有答案了 有时 当我尝试启动 Firefox 时 它会显示 Firefox 进程已在运行 所以我必须这样做 jeremy jeremy desktop ps aux grep firefox jeremy 7451 25
  • 如何在 Perl 中构建独立于操作系统的文件路径(包括可选的 Windows 驱动器号)?

    我需要在 Perl 脚本内构建一个文件路径 我应该使用哪个路径分隔符来允许我的脚本在 Windows 和 Unix 上运行 请记住 Windows 需要驱动器号 你要文件 规格 s catpath catpath Takes volume
  • 用 Javascript 编写组合和排列计算器的最有效方法

    我有一个数学网站http finitehelp com教学生有限数学 我认为包含一个计算器会很酷 所以我制作了一个用于 Javascript 中的组合和排列的计算器 实时计算器位于http finitehelp com finite cal
  • pySpark forEachPartition - 代码在哪里执行

    我正在使用 2 3 版本的 pySpark 在我当前的开发系统中无法更新到 2 4 并且有以下关于对于每个分区 首先是一些背景信息 据我了解 pySpark UDFs强制 Python 代码在 Python 实例中的 Java 虚拟机 JV
  • Rails 中带有 jquery params 的 link_to

    我想在我的 Rails 应用程序中进行就地搜索 我使用了带有原型的button to remote 但现在我使用的是JQuery 所以我更改为link to 这是我的代码 我想将地址文本字段传递到我的控制器 但输出不是我所期望的 mycon
  • DataGridView设置行高不起作用

    尝试像这样设置 RowHeight 在代码中 dgvTruckAvail RowTemplate Height 48 不起作用 我还尝试设置我添加的每一列的高度 不起作用 这是网格属性 this dgvTruckAvail AllowUse
  • d3.js 使用多列从 csv 文件中过滤

    我想使用 csv 中的多个列值进行过滤 我首先想按城市过滤 然后按关键性列过滤 我想过滤重要性 高 中 低 如何使用 AND OR 进行过滤 City 和 Criticality 是复选框 根据我想要过滤相应 csv 列中的数据的选择 寻找
  • 如何在 32 位平台上调用 GetWindowLongPtr 和 SetWindowLongPtr?

    我想 P 调用获取窗口长指针 and 设置窗口长指针 并且我看到有关它们的相互矛盾的信息 有消息称 在 32 位平台上 GetWindowLongPtr 只是一个调用 GetWindowLong 的预处理器宏 并且 GetWindowLon
  • Java:如何设置 htmlunit

    我对 Java 是个菜鸟 但我想尝试一下 htmlunit 我使用 netbeans 作为 IDE 并创建了一个项目文件夹 hu1 以下是该文件夹的结构 hu1 gt nbproject gt src gt hu1 gt test 现在 我
  • 带有共享 ID 的 JPA @OneToOne —— 我可以做得更好吗?

    我正在使用一个我不想更改的现有架构 该架构在表 Person 和 VitalStats 之间具有一对一的关系 其中 Person 有一个主键 VitalStats 使用相同的字段作为 Person 的主键和外键 这意味着它的值是相应 PK
  • 如何处理 FirebaseAuthUserCollisionException

    我开始得到FirebaseAuthUserCollisionException当我尝试登录时出现异常Facebook in my Android应用 com google firebase auth FirebaseAuthUserColl
  • 如何将形状文件导入MySQL

    我需要将 shape 文件中的空间数据导入 MySQL 表中 我能够导入到 PostGreSQL 中 MySQL 的任何指针 我需要MySQL表中的数据 安装 FWtool 后尝试此操作 ogr2ogr f MySQL MySQL data
  • 为什么存在这些替代运算符表示

    考虑这些替代运算符表示 取自here Primary Alternative and and eq bitand bitor compl not not eq or or eq xor xor eq 为什么存在这些替代运算符表示 我喜欢它们
  • dplyr:在 mutate 命令中使用过滤器、group_by [重复]

    这个问题在这里已经有答案了 我想在数据表中添加一列 其中包含 y 的每个值除以 x 1 或 2 中相应条件的平均值 其中 x2 1 对于以下数据 其中 x 1 y 应除以 1 4其中 x 2 y 应除以 1 dt1 lt data tabl
  • Python:Rabin-Karp 算法哈希

    我为了好玩而实现 Rabin Karp 算法 我遇到了这个伪代码 RABIN KARP MATCHER T P d q 1 n T length 2 m P length 3 h d m 1 mod q 4 p 0 5 t 0 6 for
  • 测试rxjs的正确方法

    我把书带来了 rxjs 在行动 并完成测试部分 测试 rxjs 代码与通常的测试不同 因为一切都是延迟加载 在书中 他们提到了两种测试方法 要么传递完成 我正在使用 QUnit 完成信号异步代码已完成 要么传递大理石图 我的问题是 我应该选