小编bre*_*ara的帖子

在 RxJS observable 的 subscribe() 中,Jest 没有处理来自 expect() 的错误

我一直在尝试让 Jest 与 RxJS 一起工作,但遇到了 Jest 无法从订阅回调内部传播错误的问题。

这是我尝试过但不起作用的示例测试:

import {of} from 'rxjs';

test('should fail', () => {
  of(false).subscribe(val => {
    expect(val).toBe(true);
  });
});
Run Code Online (Sandbox Code Playgroud)

上面的测试应该会失败,但它通过了。我用谷歌搜索并找到了以下解决方案:

这建议在玩笑中使用“完成”语法来解决问题。虽然使用“done”回调确实会使上述测试失败,但这种方法存在许多问题:

无法描述的错误

测试失败,因为 subcribe() 中的 'expect' 调用抛出错误,导致 'done()' 永远不会被调用。然后测试超时,等待完成。因此,它不是传播“期望”错误,而是导致超时错误,这意味着在期望子句中失败的每个测试都将显示超时错误,而不是“期望”调用失败的实际错误消息。

测试需要更长的时间才会失败

因为所有测试都由于超时错误而失败,这意味着每个测试需要 5 秒才能失败(异步测试在 5 秒后超时)。这会显着增加测试运行的时间

不良使用完成

done回调是为了支持异步用例测试。但是 rxjs 不一定是异步的。我上面内联的代码实际上是同步运行的。例如,以下测试将通过:

import {of} from 'rxjs';

test('should pass', () => {
  let didRunSynchronously = false;
  of(true).subscribe(() => {
    didRunSynchronously = true;
  });
  expect(didRunSynchronously).toBe(true);
});
Run Code Online (Sandbox Code Playgroud)

必须使用异步语义来解决同步测试的问题似乎很奇怪。

想知道是否有人提出了在 rxjs 中进行测试的好解决方案,这将导致expect测试库正确处理调用。

提前致谢!

package.json 中的相关依赖: …

rxjs jestjs rxjs6

8
推荐指数
2
解决办法
2940
查看次数

何时在objective-c中使用关联对象

我最近了解了objective-c中的关联对象以及如何实现它们.根据我的理解,如果您只拥有一个对象的单个实例,则它们会很有用.

我无法想到objective-c中关联对象的任何特定用例(意味着我不能使用其他方法做的用例).

有没有人具有何时使用关联对象的具体示例?

objective-c

5
推荐指数
1
解决办法
187
查看次数

标签 统计

jestjs ×1

objective-c ×1

rxjs ×1

rxjs6 ×1