2

私は次のようなバックボーンモデル内でgoogle.mapsライブラリを使用しています(coffeescript):

class Route extends Backbone.Model

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

私のテストでは、インスタンス化しようとするとRoute、明らかに問題が発生します。googleこの問題が発生しないように、テストでスタブアウトするにはどうすればよいですか?

4

2 に答える 2

4

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;
于 2011-11-30T20:36:16.403 に答える
1

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

別の解決策:JavaScriptでは、すべてのオブジェクト/関数を独自に簡単にオーバーライドできます。つまり、独自のgoogle.mapDirectionsServiceを作成できます。ところで、他のライブラリに依存せずにコードをテストする方がよいので、必要なメソッドを使用して独自のgoogleオブジェクトを作成する必要があります。

于 2011-12-02T21:52:37.763 に答える