加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unit-testing – 如何使用$location服务单元测试angularjs控制器

发布时间:2020-12-17 08:37:22 所属栏目:安全 来源:网络整理
导读:我试图创建一个简单的单元测试,测试我的show函数。 我得到以下错误: TypeError: Object #Object has no method 'show' 似乎$ rootScope不是控制器的范围? 这是我的控制器: function OpponentsCtrl($scope,$location) { $scope.show = function(url) { $l
我试图创建一个简单的单元测试,测试我的show函数。

我得到以下错误:

TypeError: Object #<Object> has no method 'show'

似乎$ rootScope不是控制器的范围?

这是我的控制器:

function OpponentsCtrl($scope,$location) {
    $scope.show = function(url) {
        $location.path(url);
    }
}
OpponentsCtrl.$inject = ['$scope','$location'];

这里是我的控制器单元测试:

describe('OpponentsCtrl',function() {
    beforeEach(module(function($provide) {
        $provide.factory('OpponentsCtrl',function($location){
            // whatever it does...
        });
    }));

    it('should change location when setting it via show function',inject(function($location,$rootScope,OpponentsCtrl) {
        $location.path('/new/path');
        $rootScope.$apply();
        expect($location.path()).toBe('/new/path');

        $rootScope.show('/test');
        expect($location.path()).toBe('/test');
    }));
});
为什么不使用spyOn函数?
describe('OpponentsCtrl',function() {

    var location;

    beforeEach(module(function($provide) {
        $provide.factory('OpponentsCtrl',function($location){
            location = $location;
        });
    }));

    it('should change location when setting it via show function',inject(function() {    
        spyOn(location,'path');    
        expect(location.path).toHaveBeenCalledWith('/new/path');
    }));
});

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读