2017-12-11 7 views
0

私は実際にIonicアプリケーションを開発しています。この文脈では、私は2つの次のプロパティがありAlertServiceクラスを実装:サービスのプロパティとして使用されるクラスをモックする

messageAlert: Alert; 
errorAlert: Alert; 

Alertクラスはので、私はその上に任意のコントロールを持っていないイオンの枠組みの一つです。私の考えでは、以下のクラスのような手作りのモックで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の2つのAlertプロパティのタイプがAlertMockであることを示すにはどうすればよいですか。それが可能なのかどうかはわかりません。しかし、そのようなクラスを模擬することができるのは私にとっては非常に基本的なようです。私が見つけたすべてのトピックは、サービスを嘲笑することについて話しました。 DIでは、型を別の型に置き換えることは非常に簡単ですが、IonicフレームワークのAlertのような単純なクラスでそれを行うメカニズムはありますか?

+0

メイク 'AlertMock'あなたは' messageAlert持って、その後 'Alert'と拡張:アラートを。 errorAlert:アラート;代替 "messageAlert:AlertMock; errorAlert:AlertMock; ' – ewizard

答えて

0

インポートとAlertMockAlertを拡張:あなたのAlertService

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; 
    } 
} 

を:

import { AlertMock } from ... 

... 

messageAlert: AlertMock; 
errorAlert: AlertMock; 
+0

私は、' AlertService'がテストパートの外で 'AlertMock'クラスを使用しないようにしたいと思います。そして、私はテストでIonicクラスのすべての複雑さを持つことを望んでいません。 –

+0

hmm私は夢中です...あなたがモックの機能を持つように 'Alert'を変更したいのであれば、あなたはそれを拡張してあなたのサービスで使用しなければならないと思います – ewizard

+0

' TestBed'のためのメカニズムはありません私は次のようなことを言うことができるでしょう: 'ClassB'の代わりに' ClassA'を使いたいですか?私たちがDIの場合と同じように。 –

関連する問題