Jasmine 테스트에서 switchMap을 실행하고 rxJS 기능을 탭하는 방법은 무엇입니까?

조롱

다음 테스트가 있습니다.

let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;
  let loader: HarnessLoader;
  const items: MyItem[] = [
    {
      id: '66249535-31bf-41f3-8f55-8a14877c6d7e',
      status: 'New'
    }
  ];

  const myServiceSpy = jasmine.createSpyObj<MyService>(
    'MyService',
    {
      getItems: of(items),
      changeItemStatus: of()
    }
  );

  const alertsServiceSpy = jasmine.createSpyObj<AlertsService>('AlertsService', [
    'error',
    'warning',
    'success',
    'info'
  ]);

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent, TableComponent],
      providers: [{ provide: MyService, useValue: myServiceSpy }, { provide: AlertsService, useValue: alertsServiceSpy}],
      imports: [MatTableModule, SharedModule]
    }).compileComponents();
  }));

  beforeEach(() => {
    myServiceSpy.getItems.calls.reset();
    fixture = TestBed.createComponent(MyComponent);
    loader = TestbedHarnessEnvironment.loader(fixture);
    component = fixture.componentInstance;
    component.myId = 123;
    fixture.detectChanges();
  });

  afterAll(() => {
    myServiceSpy.getItems.and.returnValue(of(items));
  });

  it('should call to change the item status if the slider is toggled', async(() => {
    component.onItemChange(items[0], { checked: true, event: { source: { checked: true }}});
    component.onItemChange(items[0], { checked: false, event: { source: { checked: false }}});
  
    fixture.whenStable().then(() => {
      fixture.detectChanges();
      expect(myServiceSpy.changeItemStatus).toHaveBeenCalled();
    });
  }));

그리고 다음 구성 요소

ngOnInit() {
    const updatedItems$ = this.itemChangeSubject.asObservable().pipe(
      switchMap(itemChange => {
        this.itemBeingChanged = itemChange.item;
        this.toggleEvent = itemChange.event;
        return this.myService.changeItemStatus(
          this.myId,
          itemChange.item.id
        )
        .pipe(catchError(() => {
          this.clicked = false;
          this.toggleEvent.source.checked = ! this.toggleEvent.source.checked;
          return empty();
        }));
      }), 
      tap({
        next: () => {
          const itemStatus = this.itemBeingChanged.isItemChanged ? 'active' : new';
          this.clicked = false;
          this.alerts.success({
            message: `Item is now ${itemStatus}.`
          });
        }
      }),
      switchMap(() => this.myService.getItems(
        this.myId
      )
      .pipe(catchError(() => {
        return empty();
      }))
      )
    );

    this.items$ = this.myService
      .getItems(this.myId)
      .pipe(catchError(() => {
        return empty();
      }))
      .pipe(concat(updatedItems$))
  }

  onItemChange(item: MyItem, event) {
    this.itemChangeSubject.next({ item, event });
  }

내 테스트 는 예상대로 switchMap에서 첫 번째를 실행 ngOnInit하지만 탭 부작용이나 다음 switchMap은 실행되지 않습니다. 첫 번째 체인이 아닌 전체 체인을 테스트 할 수 있도록 테스트를 수정하려면 어떻게 switchMap해야합니까? 또한 탭 또는 오류 블록을 테스트해야합니까? 나는 서비스를 호출하기 때문에 최종 switchMap에 대해 주로 우려합니다.

안드레이 가테이

나는 그것이 changeItemStatus: of().

of다음과 같이 정의 됩니다 .

return fromArray(args as T[]);

결국 도달 할 것입니다 subscribeToArray:

export const subscribeToArray = <T>(array: ArrayLike<T>) => (subscriber: Subscriber<T>) => {
  for (let i = 0, len = array.length; i < len && !subscriber.closed; i++) {
    subscriber.next(array[i]);
  }
  subscriber.complete();
};

따라서 of()array사용 하면 비어 있으며 Observable이 아무것도 방출하지 않음을 의미합니다. 결과적으로 체인의 다음 운영자에게 도달하지 않습니다.

바꿀 경우 작동합니다 of()함께 of(null).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jasmine에서 빈 기능을 테스트하는 방법은 무엇입니까?

분류에서Dev

Jasmine에서 RxJs WebSocket을 테스트하는 방법

분류에서Dev

rxjs switchmap observable을 마무리하는 방법은 무엇입니까?

분류에서Dev

메인 탭의 새 탭에서 기능을 실행하는 방법은 무엇입니까? (구글 크롬)

분류에서Dev

Jasmine으로 AngularJS에서 데이터 폴링을 테스트하는 방법은 무엇입니까?

분류에서Dev

Jasmine Test : Promise.then () 블록을 테스트하는 방법은 무엇입니까?

분류에서Dev

Jasmine으로 테스트 할 때 컨트롤러에서 $ on listener를 테스트하기 위해 $ emit을 트리거하는 방법은 무엇입니까?

분류에서Dev

Jasmine에서 JavaScript Promise 기능을 테스트하는 방법

분류에서Dev

Ionic에서 On / Off 버튼을 만들고 기능을 실행하는 방법은 무엇입니까?

분류에서Dev

monetdb에서 MAL 기능을 실행하는 방법은 무엇입니까?

분류에서Dev

Angular Jasmine Spec에서 대상과 관찰 가능한 반환 값을 테스트하는 방법은 무엇입니까?

분류에서Dev

Jasmine 테스트로 맵 박스 팝업을 단위 테스트하는 방법은 무엇입니까?

분류에서Dev

Android J 단위 테스트에서 테스트 실행을 반복하는 방법은 무엇입니까?

분류에서Dev

tkinter 노트북에서 탭 변경에 대한 기능을 트리거하는 방법은 무엇입니까?

분류에서Dev

소스 파일에서 물고기 스크립트 실행을 종료하는 방법은 무엇입니까?

분류에서Dev

kiwi bdd 테스트 케이스에서 didReceiveMemoryWarning 기능을 확인하는 방법은 무엇입니까?

분류에서Dev

Rails 6에서 Jasmine을 구성하는 방법은 무엇입니까?

분류에서Dev

Node에서 Jasmine을 사용하는 올바른 방법은 무엇입니까?

분류에서Dev

USB 3.0 허브에서 전원 기능을 테스트하는 방법은 무엇입니까?

분류에서Dev

jasmine으로 각도기에서 사양을 실행하는 파일 이름에 액세스하는 방법은 무엇입니까?

분류에서Dev

http get을 사용하여 각도 서비스에 대한 Jasmine 테스트를 작성하는 방법은 무엇입니까?

분류에서Dev

Linux NAPI 기능을 테스트하는 방법은 무엇입니까?

분류에서Dev

Makefile에서 모든 입력 테스트 파일을 실행하는 방법은 무엇입니까?

분류에서Dev

테스트 기능을 위해 각 매개 변수에서 pytest 픽스처를 실행하는 방법은 무엇입니까?

분류에서Dev

Maven을 사용하여 콘솔에서 Scala FreeSpec 테스트를 실행하는 방법은 무엇입니까?

분류에서Dev

Angular에서 중첩 구독을 피하기 위해 switchmap을 사용하는 방법은 무엇입니까?

분류에서Dev

드롭리스트의 선택에 따라 기능을 실행하는 방법은 무엇입니까?

분류에서Dev

html / css에서 MS 워드 탭 기능을 달성하는 방법은 무엇입니까?

분류에서Dev

"탭하여 클릭"을 비활성화하지 않고 Ubuntu 18.04 (libinput)에서 "탭 드래그"기능을 비활성화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Jasmine에서 빈 기능을 테스트하는 방법은 무엇입니까?

  2. 2

    Jasmine에서 RxJs WebSocket을 테스트하는 방법

  3. 3

    rxjs switchmap observable을 마무리하는 방법은 무엇입니까?

  4. 4

    메인 탭의 새 탭에서 기능을 실행하는 방법은 무엇입니까? (구글 크롬)

  5. 5

    Jasmine으로 AngularJS에서 데이터 폴링을 테스트하는 방법은 무엇입니까?

  6. 6

    Jasmine Test : Promise.then () 블록을 테스트하는 방법은 무엇입니까?

  7. 7

    Jasmine으로 테스트 할 때 컨트롤러에서 $ on listener를 테스트하기 위해 $ emit을 트리거하는 방법은 무엇입니까?

  8. 8

    Jasmine에서 JavaScript Promise 기능을 테스트하는 방법

  9. 9

    Ionic에서 On / Off 버튼을 만들고 기능을 실행하는 방법은 무엇입니까?

  10. 10

    monetdb에서 MAL 기능을 실행하는 방법은 무엇입니까?

  11. 11

    Angular Jasmine Spec에서 대상과 관찰 가능한 반환 값을 테스트하는 방법은 무엇입니까?

  12. 12

    Jasmine 테스트로 맵 박스 팝업을 단위 테스트하는 방법은 무엇입니까?

  13. 13

    Android J 단위 테스트에서 테스트 실행을 반복하는 방법은 무엇입니까?

  14. 14

    tkinter 노트북에서 탭 변경에 대한 기능을 트리거하는 방법은 무엇입니까?

  15. 15

    소스 파일에서 물고기 스크립트 실행을 종료하는 방법은 무엇입니까?

  16. 16

    kiwi bdd 테스트 케이스에서 didReceiveMemoryWarning 기능을 확인하는 방법은 무엇입니까?

  17. 17

    Rails 6에서 Jasmine을 구성하는 방법은 무엇입니까?

  18. 18

    Node에서 Jasmine을 사용하는 올바른 방법은 무엇입니까?

  19. 19

    USB 3.0 허브에서 전원 기능을 테스트하는 방법은 무엇입니까?

  20. 20

    jasmine으로 각도기에서 사양을 실행하는 파일 이름에 액세스하는 방법은 무엇입니까?

  21. 21

    http get을 사용하여 각도 서비스에 대한 Jasmine 테스트를 작성하는 방법은 무엇입니까?

  22. 22

    Linux NAPI 기능을 테스트하는 방법은 무엇입니까?

  23. 23

    Makefile에서 모든 입력 테스트 파일을 실행하는 방법은 무엇입니까?

  24. 24

    테스트 기능을 위해 각 매개 변수에서 pytest 픽스처를 실행하는 방법은 무엇입니까?

  25. 25

    Maven을 사용하여 콘솔에서 Scala FreeSpec 테스트를 실행하는 방법은 무엇입니까?

  26. 26

    Angular에서 중첩 구독을 피하기 위해 switchmap을 사용하는 방법은 무엇입니까?

  27. 27

    드롭리스트의 선택에 따라 기능을 실행하는 방법은 무엇입니까?

  28. 28

    html / css에서 MS 워드 탭 기능을 달성하는 방법은 무엇입니까?

  29. 29

    "탭하여 클릭"을 비활성화하지 않고 Ubuntu 18.04 (libinput)에서 "탭 드래그"기능을 비활성화하는 방법은 무엇입니까?

뜨겁다태그

보관