0

객체.Angular2 + 재스민 이벤트 내가 테스트 할 필요가있다이 간단한 방법을

it('should close on info container click',() => { 
    spyOn(component, 'onLayerContainerClick'); 
    const el: DebugElement = fixture.debugElement.query(By.css('.dpm-info__layerContainer')); 
    el.triggerEventHandler('click', null); 
    expect(component.onLayerContainerClick).toHaveBeenCalled(); 
    }); 

테스트가 OK이지만, instanbul은 "기능이 적용되지 않습니다"라고 : 나는 테스트하는 경우는 다음과 같이한다. 그래서 함수를 명시 적으로 호출해야합니다. 그렇게하기 위해서는 (최소한) srcTarget 속성을 포함하여 전체 이벤트 객체가 필요합니다. 단위 테스트 내에서 그러한 이벤트를 어떻게 정의합니까?

답변

1

테스트에서 조롱 한 이벤트로 함수를 호출해야합니다. component.onLayerContainerClick({ srcElement: { value: 'mock_value' } });

그리고 당신이

expect(component.closeInfoLayer).toHaveBeenCalled();

어쩌면이 https://angular.io/guide/testing#triggereventhandler 내가 이스탄불 코드를 만드는이 테스트, 함께 왔어요 estus 및 DrNio에뿐만 아니라

+0

도전 과제는 t입니다. 그는'onLayerContainerClick'에 전달 된 인자가'Event' 타입이 될 것으로 기대하는 Typescript입니다. 'srcTarget' 속성을 가진 객체를 그냥 넘겨도 커팅되지 않습니다 - 타입 에러가납니다. – pop

+0

오케이, 각 테스트의 시작 부분에'beforeEach'도 게시 할 수 있습니까? btw, component.onLayerContainerClick을 시도하는 경우 ( {srcElement : {value : 'mock_value'}}); 또는 오류가 발생합니까? – DrNio

+1

@pop 도전은 아닙니다. 유형은 장애물을 만들지 않도록 도와줍니다. ' arg' 또는' arg'를 사용하여 필요한 인수를 전달할 수 있습니다. – estus

0

감사합니다 도움이 될 기대 쓰기 적용 범위가 만족스럽고 유형 문제가 없습니다.

it('should close on info container click',() => { 
    spyOn(component, 'closeInfoLayer'); 
    const el: HTMLElement = fixture.debugElement.query(By.css('.dpm-info__layerContainer')).nativeElement; 
    const mockEvent: Event = <Event><any>{ 
     srcElement: { 
     classList: el.classList 
     }, 
     stopPropagation: <any>((e: any) => { /**/ }), 
     preventDefault: <any>((e: any) => { /**/ }), 
    }; 

    component.onLayerContainerClick(mockEvent); 
    expect(component.closeInfoLayer).toHaveBeenCalled(); 
    }); 
+0

당신은'spyOn (component, 'closeInfoLayer');'이 필요 없다고 생각합니다. 나는 이것이 외부 서비스의 함수 호출, 예 :'spyOn (myService, 'aMethodThere');' – DrNio

+0

을 검사하기를 원할 때 주로 사용한다고 생각합니다. 다시 테스트 할 뭔가가 필요합니다. 해당 메소드에는 변수가 설정되지 않고 유일한 결과는 함수 호출입니다. 그래서 이것은 제가 테스트 한 것입니다. 어떻게? – pop

+0

'spyOn (component,'closeInfoLayer ');을 삭제하면 이벤트가 조롱되므로 if 문을 전달하므로 제대로 작동해야합니다. 시도해보고 알려주세요 – DrNio