2016-05-04 130 views
0

我试图测试工厂量角器和angular.mocks如何测试这个角度工厂

这里是工厂:

angular.module('googlemarker', []) 
    .factory('newMarker', newMarkerFactory); 

    newMarkerFactory.$inject = ['$window']; 
    function newMarkerFactory($window) { 


    function newMarker(markerOpts) { 
    var position; 
    if (markerOpts.geo) { 
     position = new $window.google.maps.LatLng(
     markerOpts.geo.lat || markerOpts.geo.latitude, 
     markerOpts.geo.lng || markerOpts.geo.longitude 
    ); 
    } 
    var markerOptions = _.assign({ 
     position: markerOpts.position || position, 
     icon: '/static/img/markers/pointer_basic.png' 
    }, markerOpts); 
    $window.google.maps.Marker.call(this, markerOptions); 
    } 
    /* this is for proper inheritance */ 
    function helperConstructor() {} 
    helperConstructor.prototype = $window.google.maps.Marker.prototype; 
    newMarker.prototype = new helperConstructor(); 
    newMarker.prototype.constructor = newMarker; 

    return newMarker; 
} 

,然后我有这样的测试:

(function() { 
    fdescribe('googlemarker tests', function() { 
    'use strict'; 

    var _google = { 
     maps: { 
     Marker: function (markerOpitons) { 
      this.position = markerOpitons.position; 
     }, 
     LatLng: function (lat, lng) { 
      this._lat = lat; 
      this._lng = lng; 
     } 
     } 
    }; 

    _google.maps.LatLng.prototype.lat = function() { return this._lat; }; 
    _google.maps.LatLng.prototype.lng = function() { return this._lng; }; 

    beforeEach(module('googlemarker')); 

    beforeEach(module(function($provide) { 
     $provide.service('$window', function() { this.google = google; }); 
    })); 

    it("googlemarker transform geo in google.maps.LatLng", inject(function (newMarker) { 
     var opts = { 
     geo: { 
      latitude: 2, 
      longitude: 2 
     } 
     }; 
     var marker = new newMarker(opts); 
     expect(marker.position.lat()).toEqual(opts.geo.latitude); 
    })); 
    }); 
})(); 

然而,这不起作用它说我这是不确定的行: “功能newMarker”说这是未定义的。有人能帮助我吗?

回答

0

有人杀了我:

$provide.service('$window', function() { this.google = google; }); 

它应该有下划线,因为我之前

var _google = ... 

定义的变量行应该是这样的一个: 我在这一行做了一个错误:

$provide.service('$window', function() { this.google = _google; });