【问题标题】:angular add new observable operator角度添加新的可观察运算符
【发布时间】:2017-12-17 06:31:32
【问题描述】:

根据来自该站点How To Debug RxJs - A Simple Way For Debugging Rxjs Observables 的信息,我创建了一个名为observable-debug-operator.ts 的新文件,我使用import './observable-debug-operator'; 将其导入我的应用组件中

observable-debug-operator 文件的内容如下

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';

import { environment } from '../environments/environment';

// add debugging to Observables
Observable.prototype.debug = function (message: string) {
  return this.do(
    function (next) {
      if (environment.observableDebugging) {
        console.log(message, next);
      }
    },
    function (err) {
      if (environment.observableDebugging) {
        console.error('ERROR >>> ', message , err);
      }
    },
    function () {
      if (environment.observableDebugging) {
        console.log('Completed.', message);
      }
    }
  );
};
declare module 'rxjs/Observable' {
  interface Observable<T> {
    debug: (...any) => Observable<T>;
  }
}

这是按预期工作的,我可以订阅一个 observable 并将其调试到控制台

this.service.methodThatReturnsObservable()
  .debug('doing something with an observable')
  .subscribe(...do something...);

但是,当我运行我的业力测试时,我得到了错误

TypeError: Cannot read property 'debug' of undefined

Failed: Uncaught (in promise): TypeError: Cannot read property 'debug' of undefined
TypeError: Cannot read property 'debug' of undefined

我尝试在我的测试规范中包含import 'the/path/to/observable-debug-operator';,但我仍然收到错误消息。有谁知道为什么在测试中没有找到调试操作符但在实际代码中工作正常?

【问题讨论】:

  • 这个错误并不是说你的调试操作符是未定义的,更多的是关于Observable.prototypethis.service.methodThatReturnsObservable是未定义的。
  • @cyrix 绝对正确。我不知道为什么我误读了那个错误。我已经模拟了服务,所以我需要从模拟的方法中返回一个 observable。现在它工作正常。如果你把它作为一个答案,我会接受它

标签: angular rxjs karma-jasmine observable


【解决方案1】:

错误并不意味着您的debug 未定义。它说您的服务方法或 Observable.prototype 是undefined。因此,请检查它们是否可用。

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 2020-12-20
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-11-26
    相关资源
    最近更新 更多