質問

このようなバックボーンモデル内のGoogle.Mapsライブラリを使用しています(coffeescript):

class Route extends Backbone.Model

  initialize: ->
    @directionsService = new google.maps.DirectionsService()

私のテストでは、私がインスタンス化しようとするたびに Route, 、私は明らかに問題に遭遇します。どうすればスタブアウトできますか google 私のテストでは、この問題を引き起こさないようにしますか?

役に立ちましたか?

解決

Coffescriptについてはあまり知らないはずですが、モデルコンストラクターに2番目のオブジェクトを引数として与えることができます。

var mymodel = new Route({/*attributes*/}, {directionService: yourStub});

次に、初期化関数で、次のことを書きます。

initialize: function(atts, options) {
  this.directionService = options.directionService || new google.maps.DirectionsService();
}

これで、方向サービスにスタブをスタブするか、単一のインスタンスに別のサービス(ある場合)を使用できます。

別の方法は、DirectionServiceを直接交換することです。

var origService = google.maps.DirectionsService;
google.maps.DirectionsService = function() {/*your stub*/};
var route = new Route();
google.maps.DirectionsService = origService;

他のヒント

テスト可能なコードを作成しようとする主な障害の1つは、テストするオブジェクトに新しいインスタンスを作成することです。パターン呼び出しがあります 制御の反転 これにより、テスト可能なコードの作成に役立ちます。トリックは、クラスで作成するすべてのものがコンストラクターに注入されることです。このようにして、テストでは、単純なモックまたはスタブを注入するだけです。したがって、Protomの答えはこのパターンに関するものです。

別のソリューション:JavaScriptでは、すべてのオブジェクト/関数を独自のもので簡単にオーバーライドできます。つまり、独自のgoogle.map directionsserviceを作成できます。ところで、他のLIBに依存せずにコードをテストすることをお勧めします。そのため、必要な方法で独自のGoogleオブジェクトを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top