Angular 和 Jasmine - $scope函数未定义
Angular and Jasmine - $scope function is undefined
我有一个控制器
var videoApp = angular.module('videoApp', ['videoAppFilters', 'ui.unique', 'angularUtils.directives.dirPagination']);
videoApp.controller('VideoCtrl', function ($scope, $http, $filter, cacheLoader, $rootScope) {
$scope.setPageSize = function (pageSize) {
$scope.pageSize = pageSize;
return $scope.pageSize;
};
$scope.addFavorite = function (data, key) {
localStorage.setItem(key, data);
$scope.videos = $filter('articleFilter')(data, $scope.allData);
return alert(key + " "+ data + " was added to your favorite list.");
};
$scope.addSelectedClass = function (event) {
if($(event.target).hasClass("selected") == true)
{
$(event.target).removeClass("selected");
} else {
$(".selected").removeClass("selected");
$(event.target).addClass("selected");
}
};
$scope.filterArticles = function (category) {
$scope.videos = $filter('articleFilter')(category, $scope.allData);
};
$scope.pageSize = 12;
cacheLoader.load('http://academy.tutoky.com/api/json.php', true, function () {
$scope.allData = $rootScope.allData;
$scope.videos = $rootScope.videos;
if(localStorage.getItem('category')) {
$scope.videos = $filter('articleFilter')(localStorage.getItem('category'), $scope.allData);
} else {
$scope.videos = data;
}
});
});
和测试
describe('Check if VideoListCtrl', function() {
beforeEach(module('videoApp'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
beforeEach(inject(function ($rootScope) {
$scope = {};
controller = $controller('VideoCtrl', { $scope: $scope });
}));
it('exists', function() {
expect(controller).not.toBeNull();
});
it('set page size', function () {
expect($scope.setPageSize(12)).toEqual(12);
});
});
我想测试控制器方法是否正常工作,但 Jasmine 会在第二次测试中出现错误:
类型错误:未定义不是函数
导致问题的事情是$scope.setPageSize(12)。我正在按照有关角度文档的教程进行操作,他们正在像那样使用范围的方法,但它在我的情况下不起作用。有人知道为什么吗?
我想你应该注意到在茉莉花中,"it"描述"是函数。
因此,当您需要在$scope内部测试某些东西时。你应该确保在任何"it"函数中,它都应该访问您的变量。
只需将您的测试用例更改为以下内容:
describe('Check if VideoListCtrl', function() {
//Add an initialize here:
var $scope = null;
beforeEach(module('videoApp'));
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
beforeEach(inject(function ($rootScope) {
//new a $scope
$scope = $rootScope.$new();
controller = $controller('VideoCtrl', { $scope: $scope });
}));
it('exists', function() {
expect(controller).not.toBeNull();
});
it('set page size', function () {
expect($scope.setPageSize(12)).toEqual(12);
});
});
或者您可以在角度文档中检查这一点。
希望这会起作用。
相关文章:
- 控制器内部的scope函数不根据视图中的ng模型更新值
- 如何在angular中重复scope函数
- $scope.$on('$routeChangeSuccess'..) 和在 scope 函数中调用方法
- Angular 和 Jasmine - $scope函数未定义
- $scope函数参数从何而来
- 自定义指令调用$scope函数会导致$rootScope:infdig
- 没有调用li元素内部的scope函数
- AngularJS:如何将window.setTimeout插入到scope函数中
- angular$cookieStore在controller$scope函数下不工作
- 如何从指令中的templateUrl运行$scope函数
- Angular.js:存储http.get请求中的变量,以便在不同的$scope函数中全局使用
- 为什么我看不到在$scope函数中定义的$scope变量?
- 我可以在angularjs的$scope函数中写一个this函数吗?
- 无法在ng-repeat中调用$scope函数
- 为什么一些角$scope函数"return&;一个操作
- 如何在angular.js中调用ng-title属性上的scope函数?
- 如何在angular-kendojs中使用href来调用angular的$scope函数
- AngularJS:在$scope函数内等待ng点击事件
- 将$scope函数转换为常规var函数.对性能有任何影响吗
- 如何从angularjs指令中调用$scope函数