Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Karma和Jasmine测试调用控制器函数_Javascript_Angularjs_Unit Testing_Karma Jasmine - Fatal编程技术网

Javascript 从Karma和Jasmine测试调用控制器函数

Javascript 从Karma和Jasmine测试调用控制器函数,javascript,angularjs,unit-testing,karma-jasmine,Javascript,Angularjs,Unit Testing,Karma Jasmine,这是我的角度控制器:- angular.module('authoring-controllers', []). controller('NavCtrl', function($scope, $location, BasketNavigationService) { $scope.test= function() { $scope.testVar = BasketNavigationService.showBasketList();

这是我的角度控制器:-

 angular.module('authoring-controllers', []).
        controller('NavCtrl', function($scope, $location, BasketNavigationService) {

$scope.test= function() {
                $scope.testVar = BasketNavigationService.showBasketList();
            };
        });
测试类

describe('NavCtrl', function() {
    var scope, $location, createController;

    beforeEach(inject(function ($rootScope, $controller, _$location_) {
        $location = _$location_;
        scope = $rootScope.$new();

        createController = function() {
            return $controller('NavCtrl', {
                '$scope': scope
            });
        };
    }));

    it('should create $scope.testVar when calling test', 
        function() {
          expect(scope.testVar).toBeUndefined();
          scope.test();
          expect(scope.testVar).toBeDefined();
      });
});
运行该测试用例时出错:-scope.test()未定义

如果我从控制器中删除了BasketNavigationService功能,则它正在工作


请帮助我解决karma测试用例。

请将您的
createController
设置更改为:

 createController = function() {
            return $controller('NavCtrl', {
                '$scope': scope,
                '$location':$location,
                'BasketNavigationService':{showBasketList: function(){return 'test'} }
            });
        };
您没有注入所有依赖项。
我已经注入了虚拟的
BasketNavigationService
,您可以注入真实的。

您是否尝试运行
createController()?我不认为你的
NavCtrl
控制器会被嘲笑。

这是正在运行的演示,希望能有所帮助。 问题在于注入依赖项。
/--code--------------------------
(功能(角度){
//创建模块
var myApp=angular.module('myApp',[]);
//对其“名称”成员的更改进行计数的控制器
myApp.controller('MyCtrl'、['$scope'、'BasketNavigationService',
功能($scope,BasketNavigationService){
$scope.test=函数(){
$scope.testVar=BasketNavigationService.showBasketList();;
};
}
]);
})(角度);
//---规格-------------------------
描述('myApp',函数(){
var范围,
控制器;
beforeach(函数(){
模块(“myApp”);
});
描述('MyCtrl',函数(){
beforeach(注入(函数($rootScope,$controller){
scope=$rootScope.$new();
控制器=$controller('MyCtrl'{
“$scope”:范围,
“BasketNavigationService”:{
showBasketList:函数(){
返回null;
}
}
});
}));
它('调用测试时应创建$scope.testVar',
函数(){
expect(scope.testVar).toBeUndefined();
scope.test();
//范围。$digest();
expect(scope.testVar).tobededefined();
});
});
});
//---跑步者-------------------------
(功能(){
var jasmineEnv=jasmine.getEnv();
jasmineEnv.updateInterval=1000;
var htmlReporter=new jasmine.htmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter=函数(spec){
返回htmlReporter.specFilter(spec);
};
var currentWindowOnload=window.onload;
window.onload=函数(){
如果(currentWindowOnload){
currentWindowOnload();
}
茉莉花();
};
函数execJasmine(){
jasminev.execute();
}
})();


您在
expect(scope.testVar).toBedefined()中有一个输入错误应该是
expect(scope.testVar).tobededefine()谢谢,为什么要写返回“test”我必须在这里写什么?我只是返回一个伪值。