0

私は最初にそこにいたニワトリまたは卵を持っています... 問題。

AlarmOverlay は OverlayView から派生します。

コンストラクタ関数を呼び出して AlarmOverlay を作成する前に、OverlayView から継承するために「google」オブジェクトがすでに必要です。しかし、Googleオブジェクトはコンストラクターで渡されるだけです...

このAlarmOverlayクラスを使用して単体テストを作成するため、requirejsでGoogleオブジェクトを挿入できないため、http呼び出しを回避する必要があります...私は自分のGoogle偽物オブジェクトを渡しています。

新しい google.maps.OverlayView() 呼び出しが完了したときに google オブジェクトが未定義にならないように、コードを書き直すにはどうすればよいですか?

    define(['jquery','inject google here is not allowed because of the unit test'], function($) {

    AlarmOverlay.prototype = new google.maps.OverlayView();

    function AlarmOverlay(bounds, alarmNumber, alarmCssClass , google) {

        this.google = google;
    }    

    AlarmOverlay.prototype.createMapOnOverlay = function (map) {

    };

    AlarmOverlay.prototype.onAdd = function() {

    };

    AlarmOverlay.prototype.draw = function() {

    };

    return AlarmOverlay;

});
4

1 に答える 1

0

単体テスト時にはモックの Google オブジェクトを渡すように requirejs を構成し、本番環境での実行時には実際の G​​oogle オブジェクトを渡す必要があります。そうすれば、どちらのシナリオでも AlarmOverlay オブジェクトを変更する必要はありません。

モック オブジェクトはオブジェクトの動作をシミュレートするため、ユニットは驚くことなくモックを呼び出すことができます。この場合、モック オブジェクトはmaps.OverlayView,おそらく次のように実装する必要があります。

mygoogle.js

define(function() {
   return {
    maps: { OverlayView: function() {} }
  }
}

次に、テスト中に、おそらく次のようにgoogleモジュールをにマップします。mymodule

main.js または page.html

requirejs.config({
  paths: {
      google: '../mocks/mygoogle.js'
  }
});

本番環境では、google モジュールを本格的な google オブジェクトにマップします。

main.js または page.html

requirejs.config({
  paths: {
      google: '[your production google]'
  }
});

これで、本番用とテスト用に同じコードを使用できます。

alarmOverlay.js

define(['jquery','google'], function($, google) {

/* reference 'google' anywhere in this module */ 
function AlarmOverlay(bounds, alarmNumber, alarmCssClass) {

}    

AlarmOverlay.prototype = new google.maps.OverlayView();

AlarmOverlay.prototype.createMapOnOverlay = function (map) {

};

AlarmOverlay.prototype.onAdd = function() {

};

AlarmOverlay.prototype.draw = function() {

};

return AlarmOverlay;

});
于 2013-05-21T19:44:22.333 に答える