【问题标题】:TypeError: expect(...).toBeObservable is not a function - Jasmine marblesTypeError: expect(...).toBeObservable 不是一个函数 - Jasmine marbles
【发布时间】:2019-08-08 18:24:42
【问题描述】:

我正在尝试编写一个基本的ngrx 效果测试。但是我不断收到错误,因为 TypeError: expect(...).toBeObservable is not a function。

这是一个使用 Angular 7 的新项目设置。我以前在 Angular 4 中运行的项目没有任何问题。

最初认为这可能与软件包有关,因此将所有软件包升级到最新但还没有运气。

我试图测试一个非常简单的 observable 作为 expect(effects.test$).toBeObservable(5);但它给出了同样的错误。如标题所述,我使用的是 jasmine-marbles,版本为 0.4.1。

【问题讨论】:

  • 我猜这是rxjs引起的。从rxjs 6开始,变化很大,所以我认为这是依赖版本问题。
  • 同样从 rxjs 6 开始,它使用管道样式运算符,github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md,我认为您也需要将代码更改为管道运算符。
  • 谢谢@Niuhuru Lang,我知道有管道的操作员。令我惊讶的是,我刚刚在全球范围内安装了 Angular CLI 7 并做了一个新项目。添加了商店和茉莉花弹珠。我希望通过一个简单的可观察测试,但它没有发生!

标签: angular7 ngrx-effects jasmine-marbles


【解决方案1】:

您需要初始化测试调度器并在每个或 toBeObservable 不会被定义之前添加匹配器:

import { addMatchers, initTestScheduler } from 'jasmine-marbles';

beforeEach(() => {
  ...
  initTestScheduler();
  addMatchers();
});

【讨论】:

  • 我遇到了和 OP 一样的问题。我应用了您的修复程序,现在我收到了 TypeError: Cannot read property 'indexOf' of undefined --> 来自 TestScheduler.ts parseMarbles 方法 --> marbles.indexOf('!') --> 弹珠未定义。
  • @codeepic,您需要通过 jasmin-marbles 函数输入可观察的构建。这将工作:const expected$ = cold('(a)', { a: false }); expect(result$).toBeObservable(expected$); 虽然这不会 const expected1$ = of(false); expect(result$).toBeObservable(expected1$);
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2014-09-16
  • 2015-11-23
相关资源
最近更新 更多