2017-03-28 3 views
-1

client이라는 라이브러리를 사용하는 Service이 있습니다.타사 라이브러리를 사용하는 서비스를 테스트하십시오.

내가로드하는 Client 클래스는 clientService 개인 속성에 저장됩니다. 내 사양에 대한

,이

service = new Service(mockClient) 

처럼 내 서비스에 mockClient를 주입 할 수는 없지만 나도

service = new Service() 
service.client = mockClient 

이후 client이 비공개 할 수 없습니다.

주입되지 않았고 조롱하고 싶은 타사 라이브러리를 사용하는 서비스를 테스트하는 올바른 방법은 무엇입니까?

편집 : 내 서비스는 여기에 적절한 연습이 타사 라이브러리가 주입되도록 코드를 리팩토링하는이

import { Client } from 'someLib'; 

Injectable() 
export class Service { 
    private client: Client; 

    constructor() { 
    this.client = new Client(); 
    } 
+0

덜 추상적 인 예를 들어 주시겠습니까? DI를 사용하여 모의를 제공 할 수없는 이유는 무엇입니까? – jonrsharpe

+0

서비스 클래스로 내 게시물을 편집했습니다. 제 3 자 lib가 주입되지 않기 때문에 DI를 사용할 수 없습니다. – Lev

+1

리팩터링을 통해 * 주입 *하면 쉽게 테스트 할 수 있습니다. – jonrsharpe

답변

0

같은 타사 lib 디렉토리를 사용합니다. 먼저 라이브러리를 서비스 나 공장에서 포장해야합니다. 보너스로 사용중인 타사 라이브러리의 일부만 공개하고 싶을 수 있습니다. 서비스에서 매개 변수의 유효성을 검사하고 변형하여 호출 서명이 앱에 적합한 지 확인할 수 있습니다. 그러면 다음과 같이 보일 수 있습니다.

이 클라이언트 래퍼를 사용하여 클래스에 삽입 한 다음이를 조롱 할 수 있습니다.

ps-I angualarjs는 기본 유형으로 팩토리를 제공하지만, 저는 공장에서 수행하는 모든 작업을 수행하므로 서비스를 선호합니다. YMMV.

관련 문제