angularjs karma test typeerror $ route

时间:2014-09-25 15:47:39

标签: javascript angularjs jasmine karma-runner

我正在尝试使用karma测试angularjs的控制器,控制器注入$ route来获取当前路径但是当我尝试对其进行karma测试时,我得到了。

TypeError: 'undefined' is not an object( evaluating '$route.current')

这是我的控制器:

angular.module('myApp').controller('EditController',['$scope', '$http', '$route', function($scope,
$http,$route){

    var myId = $route.current.params.myId;  
    $scope.var1 = 'var1';  
    console.log(myId);
}]);

这是我的Karma文件:

'use strict';
describe('Controller: EditController', function(){
    beforeEach(module('myApp'));
    var EditCtrl,scope,route;

    beforeEach(inject(function($controller,$rootScope,$route,$http){
     scope=$rootScope.$new();
     EditCtrl = $controller('EditCtrl',{
        $scope:scope,
        $route:route
     });
    }));

    it('should have var1 equal to "var1"',function(){
        expect(scope.var1).toEqual('var1');
    }); 
});

1 个答案:

答案 0 :(得分:2)

您的beforeEach挂钩未注入$route服务。把它改成这个。

beforeEach(inject(function($controller,$rootScope,$route,$http){
 scope=$rootScope.$new();
 route = $route;
 EditCtrl = $controller('EditCtrl',{
    $scope:scope,
    $route:route
 });
}));

您可能还想模拟$route.current对象,以防它未正确实例化,因为您的测试中没有路由。在这种情况下,您可以添加

$route.current = { params: { myId: 'test' } };

也在钩子里。