Rxjs TestScheduler/RunHelper具体示例



我一直在看视频和阅读文章,但到目前为止,它们要么让我不知所措,要么过于简单。(在这里寻找一个好的金发姑娘类型的实用解释。(

我有一个角度服务,它有一个可观察的属性,就像这样,我想测试的属性是message$:

@Injectable()
export class MyMessageService {
private messageSubj = new BehaviorSubject("");
public message$ = this.messageSubj.pipe(filter(msg => !!msg));

public someFunction(msg: string): void {
this.messageSubj.next(msg);
}
}

message$根本不应该发射,直到受试者以某种方式获得下一个。

我发现的所有测试(至少对我来说是有意义的(都定义了3个可观察性:source$expected$result$,然后比较最后两个:

it("should be easier to test than this", () => {
scheduler.run((helpers: RunHelpers) => {
const source$ = helpers.cold("-a-b|", { a: "", b: "hello" });
const expected$ = helpers.cold("---b|", { b: "hello" });

const result$ = source$.pipe(filter(x => !!x));
helpers.expectObservable(result$).toEqual(expected$);
});
});

现在,如果我想测试我的服务的message$可观察性,我将如何更改上面的测试?我会用const source$ = myService.message$替换source$吗?这是正确的吗?

如果我这样做,我可以测试它不会发射(哇!(。但是我怎么能这样测试它呢;a";源不发射,但在"0"之前或在"0;b";,我呼叫CCD_ 9;b";,值为"0";你好";?

谢谢!

我不确定您找到的测试示例;我会测试message$,以发出这样的期望值:

it('should emit a value when calling someFunction function', () => {
service.someFunction('Hello');
// success
service.message$.subscribe((message) => expect(message).toEqual('Hello'))
})
it('should not emit any value from messages$', () => {
// success, although is missing expectations
service.message$.subscribe((message) => expect(message).toBeUndefined())
})

消息$根本不应该发出,直到主题以某种方式获得下一个消息。

message$如果没有人订阅可观察到的,则根本不应该发出,即使我在值旁边调用someFunction,如果没有人预订messages$,则它将不会发出任何东西。

如果我这样做,我可以测试它是否不会发射(哇!(。

正确,因为没有人订阅$messages,所以没有发出的值

最新更新