1

mapboxgl.Map私の単体テストでは、メソッドの新しいインスタンスを作成した後、場合によってmap.setStyleは未定義です。単体テストは、angular 1.5 + karma jasmine を実行しています。最新バージョンの mapboxgl を使用しています。

ディレクティブ内でマップを作成する場合は、次のようにmap.setStyle定義されます。

// directive 
angular.directive('mapDirective', function() {
    link: function(scope, elem, attr, ctrl) {
        ctrl.map = new mapboxgl.Map({
            container: elem[0],
            style: 'mapbox://styles/spmatt/ciksnpcsy004992klvge9h2zb'
        });
        console.log(ctrl.map.setStyle); // defined
    }
});


// tests
let element = angular.element('<map-directive></map-directive>');
this.$compile(element)(this.$rootScope.$new());
this.$rootScope.$digest();

expect(this.vm.map.setStyle).toBeDefined(); // passes

テストで作成する場合、map.setStyle定義されていません。例:

let element = angular.element('<div></div>');
this.$compile(element)(this.$rootScope.$new());
this.$rootScope.$digest();

map = new mapboxgl.Map({
  container: element[0],
  style: 'mapbox://styles/spmatt/ciksnpcsy004992klvge9h2zb'
});

expect(map.setSyle).toBeDefined(); // fail

2 番目のインスタンスは機能しているはずですが、失敗する理由はありますか?

4

1 に答える 1

0

テスト環境は何ですか?一部のヘッドレス ブラウザには GL がないため、MapboxGL はサポートされません。

見て、何mapboxgl.supported()が返されるかを確認してください。これが原因でマップのインスタンス化が失敗するのではないかと思います。

于 2016-08-25T23:32:15.697 に答える