我怎样才能让 rxjs-spy 的 let 运算符工作?

How can I make rxjs-spy's let operator work?

如何使用 rxjs-spy's let() 方法 多次 次更改可观察值的值?

我正在关注该工具的 this introduction,当我想到使用 let() 的示例时: spy.let("people", source => source.mapTo("mallory")); 我被卡住了,因为 source 是一个 Observable<any>,它没有 mapTo() 方法。因此,当粘贴到我的 chrome 控制台时,这一行应该 正常工作 但由于 mapTo() 早已不复存在,它会引发异常。

我唯一能想到的方法没有用。这允许我访问 rxjs 运算符

// In a top level typescript file (I add this file to debug builds only)
// This just lets me use rxjs operators, of, and tag, in the chrome console
import { tag } from 'rxjs-spy/operators/tag';
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = {
  rxjs: { operators, of },
  spy: { tag }
};
const spy = create();

然后我在某处有一个 observable

myObservable.pipe(
  tag("foo")
)

并在 chrome 控制台中。 (注意:我也尝试过不使用管道和标签)

spy.let("foo", fooObservable => window.debug.rxjs
    .of(1)
    .pipe(
        window.debug.spy.tag("foo")
    )
);

这仅在我第一次尝试更新值时有效。而且我觉得这工作量太大了。

我不理解的最后一个问题是在使用 spy.let(...) 之后,我认为 spy.undo(1)(将 1 替换为当时正确的任何值)可能会帮助我测试多个值但它炸毁了快照,给我这样的东西:

spy.show()
0 snapshot(s) matching /.+/

我在使用该工具时也经常收到此警告

index.js:3551 Cyclic next detected; type = subject; value = [object Object]; subscribed at
Observable._subscribe (http://localhost:4200/vendor.js:291983:33)
Observable.subscribe (http://localhost:4200/vendor.js:291934:22)
http://localhost:4200/vendor.js:291217:44
notify_ (http://localhost:4200/vendor.js:291076:9)

明白了——我只是错过了 complete 选项。问题似乎是因为 let() 默认 completetrue

所以我仍然有一个在调试版本中使用的文件。这允许我在 chrome 控制台中使用 rxjs 运算符:

// import { tag } from 'rxjs-spy/operators/tag'; You shouldn't need this in the console.
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = { rxjs: { operators, of } };
const spy = create();

然后在控制台中我将完整选项设置为 false。根据您的操作,这可能不适用,但我想继续手动更新值以查看更改结果。

// Add { complete: false } to the parameter list.
spy.let("foo", fooObservable => window.debug.rxjs.of(8), { complete: false });