首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在jasmine测试中访问leafletData对象

无法在jasmine测试中访问leafletData对象
EN

Stack Overflow用户
提问于 2014-10-27 16:38:46
回答 1查看 1.4K关注 0票数 2

我们正在使用angularjs和单张来显示地图。同时,我们使用jasmine(1.3.1.5) + maven进行测试。在编写的规范中,我们无法访问leafletData对象。控制器是这样的:

代码语言:javascript
复制
  angular.module('TestProject').controller('TestCtrl', ['$scope', 'leafletData',       
         function TestCtrl($scope, leafletData){
         'use strict';
          $scope.map;
          leafletData.getMap().then(function(map) {
                var southWest = L.latLng(-90, -180),
                northEast = L.latLng(90, 180),
                bounds = L.latLngBounds(southWest, northEast);
                mapObj.setMaxBounds(bounds);
                mapObj.options.maxZoom = 19;
                mapObj.options.minZoom = 1;
                $scope.map=map;
                $scope.featureGroup = L.featureGroup().addTo($scope.map);
      });
  }]);

控制器的规格为:

代码语言:javascript
复制
   describe("test controller",function() {
        var scope,leafletData, compile;

        beforeEach(module("TestProject"));

        beforeEach(inject(function($controller, $rootScope, $compile, leafletData) {
            scope = $rootScope.$new();
            compile = $compile;

            $controller('TestCtrl', {
                '$scope' : scope,
                'leafletData' : leafletData
            });
        }));

        it("test function", function() {
            var element = angular.element('<leaflet></leaflet>');
            element = compile(element)(scope);
            expect(leafletData).toBeDefined();
            leafletData.getMap().then(function(map) {
                scope.map = map;
            });
            $rootScope.$digest();
            expect(scope.map.getZoom()).toEqual(1);
            expect(scope.map.getCenter().lat).toEqual(0);
            expect(scope.map.getCenter().lng).toEqual(0);
        });

  });

我们得到的错误是:

1.)测试控制器it测试功能<<<失败!*预期定义未定义。* TypeError:'undefined‘不是规范/控制器/testCtrlSpec.js中的对象(计算'leafletData.getMap') (第22行)

我们特别导入了angular-leaflet-directive中的所有js文件,但它似乎不起作用。我们还感觉到这可能是角度模块名称差异的问题,我们尝试使用beforeEach(模块(“TestProject”,"leaflet-directive"));但这也没有解决我们的问题。

请帮我们解决这个问题!

EN

回答 1

Stack Overflow用户

发布于 2014-12-06 07:51:42

没有定义leafletData,因为它是在测试的顶部声明的,但从来没有赋值给它。这是将可注入内容引入测试时要遵循的一般模式:

代码语言:javascript
复制
describe("test controller",function() {
    var leafletData;

    beforeEach(module("TestProject"));

    beforeEach(inject(function(_leafletData_) {
        // without this, leafletData will be undefined
        leafletData = _leafletData_;
    }));

    it("should be defined", function() {
        expect(leafletData).toBeDefined();
    });
});

此外,在进行任何单元测试时,应隔离测试被测代码。它所依赖的任何服务(即本例中的leafletData )以及来自这些服务的响应都应该被模拟。例如:

代码语言:javascript
复制
describe("test controller",function() {
    var $q;
    var scope;
    var leafletData;

    var mockMapData = {
        // ...
        // some mock map data
        // ...
    };

    beforeEach(module("TestProject"));

    beforeEach(inject(function(_$controller_, _$rootScope_, _$q_, _leafletData_) {
        scope = _$rootScope_.$new();
        $q = _$q_;
        leafletData = _leafletData_;

        // mock the leafletData
        spyOn(leafletData, 'getMap').andReturn($q.when(mockMapData));

        _$controller_('TestCtrl', {
            '$scope' : scope
        });
    }));

    it("test function", function() {
        scope.$digest();
        expect(scope.map).toEqual(mockMapData);
    });
});;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26583702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档