'RxJs'에 해당하는 글 2건

m: expect.objectContaining({ type: ServerActions.InitialServersLoaded.type })

이 조합으로 검증을 하면 귀찮은 일이 많이 생긴다. 아래 같이 InitialServerLoaded Action을 발산할 때 Action에 Field가 여러 개고 랜덤으로 생성되는 값이면 아주 귀찮아진다. 

 

      it('무조건, IntialServersLoadedOk를 발산해야 한다', () => {
        jest.spyOn(metricsApiSvc, 'getServerMetric')
          .mockImplementation(() => of( mockResponse ));

        testScheduler.run(helpers => {
          const { cold, hot, expectObservable, expectSubscriptions, flush } = helpers;
          actions$ = hot('-a----a-', { a: ServerActions.InitialServersRequesting() });

          expectObservable(spectator.service.initialServersRequesting$).toBe(
            '-(ml)-l-',
            {
              l: ServerActions.InitialServersLoadedOk(),
              m: ServerActions.InitialServersLoaded({servers: {
              	id: 355232,
                desc: 'desc'
              })
            }
          );
        })
      });

RxJs Marble Testing를 Jest와 같이 사용하게 되면, Assert에 toEqual이 사용된다. 그리고 Jest에서는 다행히도 toEqual 내에서 사용 가능한 Matcher가 존재한다. 그중 하나가 expect.any이다. 그래서 다음과 같이 변경 가능하다. 

// ...

m: ServerActions.InitialServersLoaded({servers: {
	id: expect.any(number),
    desc: expect.any(string)
})

// ...

그런데 이것도 필드 수가 많아지면 피곤해진다. type만 비교하고 싶은데 말이지. 그럴 때는 다음과 같이.. 

m: expect.objectContaining({ type: ServerActions.InitialServersLoaded.type })

 


WRITTEN BY
HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.

,

Angular 테스팅에서 jest를 사용하는데, Marble Testing을 해야하기에 테스팅 툴을 찾았다. 

 

jasmine-marble 과 비슷하게 jest-marble이 있기에 아무 생각없이 올려서 사용하는데, Time Progression Syntax가 지원이 안 된다. 사용 방법을 찾다가 알게 된 거, jasmine-marble이고 jest-marble이고 간에 모두 rxjs testing 툴을 그냥 Wrapping한 거였다. ㅎㅎ 

 

그냥 rxjs의 기본 testing tool을 사용하면 될 걸 삽질 하고 있었다. 

 

Reference


WRITTEN BY
HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.

,