NgRx Effect에 withLatestFrom을 조합해서 사용하는 Production Code는 아주 잘 동작한다. 근데, 이걸 Effect에서 Unit Test와 MockStore를 조합해서 사용하면 동작하지 않는다. 그냥 undefined stream이라는 에러만 뱉어 낸다.
구글링을 해도 실마리는 없고, 대충 여러 가지 글을 추정으로 다음과 같은 결론을 내렸다.
withLatestFrom은 Observable이나 Array등을 입력으로 받는데, 이게 이미 초기화가 이루어져 있어야 한다. 초기화가 이루어져 있지 않으면 undefined stream이 된다. 즉, 현재 에러는 withLatestFrom의 source stream 들이 초기화가 이루어져 있지 않아 undefined stream 에러를 발생시키는 것으로 보인다.
Production Code에서는 MockStore 등을 사용하지 않으므로, Store의 초기화, 각 Observable들의 초기화 등의 모든 게 이루어진 다음에 withLatestFrom의 Source Observable이 참조되는 것 같다.
해결책은 Source Observable이 할당된 후, Effect를 생성시키면 된다. 아래 예는 동작하지만, isActive$를 testPolling$ 아래에 위치키는 순간 undefined stream 에러가 발생한다.
export class RecentEventStoreEffects {
isActive$ = this.facade.isActive$;
testPolling$ = createEffect( () => this.actions$.pipe(
ofType(RecentEventStoreActions.RecentEventStartPolling),
withLatestFrom( this.isActive$ ),
.................
));
.....
WRITTEN BY
- HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.
,