Rx js оператора не выдает значение при использовании прокси - PullRequest
1 голос
/ 01 февраля 2020

У меня есть простой модульный тест, который использует Заменить. js (также пробовал это с TypeMoq mocks и поведение, которое я опишу то же самое).

В этом тесте я пытаюсь выполнить простейшую вещь, используя оператор of для испускания макета объекта. Без дальнейших операторов обратный вызов подписки никогда не вызывается. Пример:

import {Arg, Substitute, SubstituteOf} from "@fluffy-spoon/substitute";
import "reflect-metadata";
import {Observable, of} from "rxjs";

const factory = Substitute.for<MessageFactory>();
of(factory).subscribe((f) => console.log("got it")); 

Журнал консоли никогда не вызывается.

Теперь, если я не использую оператор и просто создаю наблюдаемое, журнал работает. Пример:

import {Arg, Substitute, SubstituteOf} from "@fluffy-spoon/substitute";
import "reflect-metadata";
import {Observable, of} from "rxjs";

const factory = Substitute.for<MessageFactory>();
new Observable((subscriber) => {
    subscriber.next(factory);
    subscriber.complete();
}).subscribe((f) => console.log("got it"));

Есть какие-нибудь подсказки о том, что происходит с оператором of в этом случае?

Я использую:

  • rx js: 6.5.4
  • машинопись: 3.5.3
  • узел: v10.18.1

1 Ответ

1 голос
/ 01 февраля 2020
У метода

of() есть один особый вариант использования, в котором в качестве последнего аргумента передается экземпляр Rx JS Scheduler (этот вариант использования устарел и будет удален в Rx JS 8). https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/of.ts#L9

Например, вы можете сделать следующее:

of(1, 2, 3, asyncScheduler)

Так как Substitute.for<MessageFactory>() возвращает function (попробуйте typeof factory) of() думает, что вы передаете планировщик. Substitute.for фактически возвращает Proxy под капотом, что смущает Rx JS чек . Поэтому по этой причине он никогда ничего не излучает.

В любом случае, вы можете сделать, например, это:

from([factory]).subscribe((f) => console.log("got it")); 
...