2017-12-11 10 views
0

저는 실제로 이오닉 응용 프로그램을 개발하고 있습니다.서비스의 속성으로 사용되는 클래스 모의

messageAlert: Alert; 
errorAlert: Alert; 

Alert 클래스는 내가 어떠한 제어를하지 않아도 이오니아 프레임 워크의 하나입니다 이러한 맥락에서, 나는 다음과 같은 두 가지 속성을 가진 AlertService 클래스를 구현했습니다. 내 생각은 다음 클래스처럼 만든 모의하여 Alert 클래스를 조롱했다 :

class AlertMock { 
    opts:  Object; 
    presented: boolean; 

    constructor(opts) { 
     this.opts  = opts; 
     this.presented = false; 
    } 

    present() { 
     this.presented = true; 
    } 

    dismiss() { 
     this.presented = false; 
    } 
} 

그것은 나를 단순히 presented 속성 값을 확인하여 경보 상태를 테스트 할 수 있습니다.

그러나 내 AlertService에 두 개의 Alert 속성이 AlertMock 인 대신 나타낼 수 있습니까? 나는 그것이 가능한지 모른다. 그러나 저처럼 수업을 조롱 할 수있는 것은 아주 기본적인 것 같습니다. 내가 찾은 모든 주제가 조롱 서비스에 관한 이야기입니다. DI를 사용하면 유형을 다른 것으로 대체하는 것이 매우 간단하지만 이오닉 프레임 워크의 Alert과 같은 간단한 클래스로 수행 할 수있는 메커니즘이 있습니까? ; 경고를 :

+0

메이크업'AlertMock'는'Alert'을 확장하고 당신은'messageAlert이 경우 errorAlert : 경고, '대체'messageAlert : AlertMock; errorAlert : AlertMock; ' – ewizard

답변

0

가져 오기 및 확장 AlertAlertMock에 :

import { Alert } from ... 

class AlertMock extends Alert { 
    opts:  Object; 
    presented: boolean; 

    constructor(opts) { 
     this.opts  = opts; 
     this.presented = false; 
    } 

    present() { 
     this.presented = true; 
    } 

    dismiss() { 
     this.presented = false; 
    } 
} 

당신의 AlertService에서 :

import { AlertMock } from ... 

... 

messageAlert: AlertMock; 
errorAlert: AlertMock; 
+0

'AlertService '가 테스트 파트 밖에서 AlertMock 클래스를 사용하는 것을 원하지 않습니다. 그리고 나는 시험에서 이오니아 클래스의 모든 복잡성을 가지기를 원하지 않습니다. –

+0

흠, 나는 몰라. 만약 당신이 모의 기능을 갖기 위해서'Alert'를 바꾸길 원한다면, 당신은 그것을 확장하고 당신의 서비스에서 사용해야한다고 생각한다. – ewizard

+0

그래서'TestBed'를위한 메커니즘이 없다. 예를 들면 다음과 같이 말할 수 있습니다 :'ClassB' 대신에'ClassA'를 사용하고 싶습니까? 우리는 예를 들어 DI로 할 것입니다. –