gpt4 book ai didi

javascript - 从 Karma 和 Jasmine 测试调用 Controller 函数

转载 作者:行者123 更新时间:2023-11-30 17:04:28 25 4
gpt4 key购买 nike

这是我的 Angular Controller :-

 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() 未定义..

如果我从 Controller 中删除了 BasketNavigationService 功能,那么它可以正常工作..

请帮我解决那个 karma 测试用例。

最佳答案

这是工作演示,希望对您有所帮助。问题在于注入(inject)依赖项。

//--- CODE --------------------------
(function(angular) {
// Create module
var myApp = angular.module('myApp', []);

// Controller which counts changes to its "name" member
myApp.controller('MyCtrl', ['$scope', 'BasketNavigationService',
function($scope, BasketNavigationService) {

$scope.test = function() {
$scope.testVar = BasketNavigationService.showBasketList();;
};
}
]);


})(angular);



// ---SPECS-------------------------

describe('myApp', function() {
var scope,
controller;
beforeEach(function() {
module('myApp');
});

describe('MyCtrl', function() {
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('MyCtrl', {
'$scope': scope,
'BasketNavigationService': {
showBasketList: function() {
return null;
}
}
});
}));
it('should create $scope.testVar when calling test',
function() {
expect(scope.testVar).toBeUndefined();
scope.test();
// scope.$digest();
expect(scope.testVar).toBeDefined();
});
});


});

// --- Runner -------------------------
(function() {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;

var htmlReporter = new jasmine.HtmlReporter();

jasmineEnv.addReporter(htmlReporter);

jasmineEnv.specFilter = function(spec) {
return htmlReporter.specFilter(spec);
};

var currentWindowOnload = window.onload;

window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};

function execJasmine() {
jasmineEnv.execute();
}

})();
<script src="http://jasmine.github.io/1.3/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/1.3/lib/jasmine-html.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular-mocks.js"></script>

<link href="http://jasmine.github.io/1.3/lib/jasmine.css" rel="stylesheet" />

fiddle :http://jsfiddle.net/invincibleJai/pf1deoom/1/

关于javascript - 从 Karma 和 Jasmine 测试调用 Controller 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28277008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com