我一直在看视频和阅读文章,但到目前为止,它们要么在我的脑海中,要么过于简单化。(在这里寻找一个好的金发姑娘型实用解释。)
我有一个具有可观察属性的角度服务,就像这样,我要测试的属性是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 个可观察对象: a 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$
observable,我将如何更改上述测试?我会用 替换source$
吗const source$ = myService.message$
?那是对的吗?
如果我这样做,我可以测试它不会发射(WOOHOO!)。但是我怎样才能测试它,以便在“a”处源不发射,但在“b”之前或在“b”处,我调用myService.someFunction("hello")
以便在“b”处,值是“hello”?
谢谢!