如何测试返回的 Observable 是否为 EMPTY
How to test if returned Observable is EMPTY
在一种情况下,我的效果是 return 是一个 EMPTY
Observable。我正在尝试测试这种情况,但我似乎无法弄清楚如何测试 EMPTY
Observable?
我的代码如下:
效果:
effect$ = createEffect(() =>
this.actions$.pipe(
ofType(someAction),
mergeMap(([action]) => {
if (someCondition) {
return EMPTY <-- this is what I am trying to test
}
return someServiceCall.pipe(
map((offers) => //dispatch some action,
catchError((error: string) => // dispatch another action),
)
}),
),
)
这是我的单元测试尝试,但失败了
Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)
.
考虑到条件已经在测试中满足:
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
effects.effect$.subscribe((res) => {
expect(res).toEqual(never)
done()
})
})
如果 return 是 of(null)
而不是 EMPTY
,我可以让它工作。但我真的很想知道如何测试这个案例。
EMPTY 不会发出任何东西,但会终止。因此,不会调用成功回调,但会为其触发完整回调。
如果适合你的测试,或许你可以查看完整的回调。
请原谅我对测试的了解较少,但在这里我无法放置适当的断言语句。所以,我采用了这种方法,请根据需要进行调整、更改,唯一的目的是检查是否调用了 complete
cb。
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
const success = () => {};
const error = () => {};
const complete = () => {};
effects.getShopOffersInTimeRange$.subscribe(success, error, complete);
setTimeout(() => {
expect(complete).toHaveBeenCalled();
done();
});
});
尚未测试代码,希望它有效。
看来我们在 RxJs 中有一个特定的操作来检查 observable 是否为空。操作是isEmpty()
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
effects.effect$.pipe(isEmpty()).subscribe( (res) => {
expect(res).toEqual(true)
done()
});
res 仅当 observable return with empty
时才为真
在一种情况下,我的效果是 return 是一个 EMPTY
Observable。我正在尝试测试这种情况,但我似乎无法弄清楚如何测试 EMPTY
Observable?
我的代码如下:
效果:
effect$ = createEffect(() =>
this.actions$.pipe(
ofType(someAction),
mergeMap(([action]) => {
if (someCondition) {
return EMPTY <-- this is what I am trying to test
}
return someServiceCall.pipe(
map((offers) => //dispatch some action,
catchError((error: string) => // dispatch another action),
)
}),
),
)
这是我的单元测试尝试,但失败了
Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)
.
考虑到条件已经在测试中满足:
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
effects.effect$.subscribe((res) => {
expect(res).toEqual(never)
done()
})
})
如果 return 是 of(null)
而不是 EMPTY
,我可以让它工作。但我真的很想知道如何测试这个案例。
EMPTY 不会发出任何东西,但会终止。因此,不会调用成功回调,但会为其触发完整回调。
如果适合你的测试,或许你可以查看完整的回调。
请原谅我对测试的了解较少,但在这里我无法放置适当的断言语句。所以,我采用了这种方法,请根据需要进行调整、更改,唯一的目的是检查是否调用了 complete
cb。
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
const success = () => {};
const error = () => {};
const complete = () => {};
effects.getShopOffersInTimeRange$.subscribe(success, error, complete);
setTimeout(() => {
expect(complete).toHaveBeenCalled();
done();
});
});
尚未测试代码,希望它有效。
看来我们在 RxJs 中有一个特定的操作来检查 observable 是否为空。操作是isEmpty()
it('should return EMPTY when ...', (done) => {
actions$ = of(someAction)
effects.effect$.pipe(isEmpty()).subscribe( (res) => {
expect(res).toEqual(true)
done()
});
res 仅当 observable return with empty
时才为真