类型错误:$范围是未定义的角度控制单元测试与茉莉花 [英] TypeError: $scope is undefined in Angular controller unit test with Jasmine
问题描述
这是一个的非常的简单,非常回吐向下测试和控制器。我控制器LedgerCtl'有一个注入的服务LedgerService我在其他地方进行测试,所以在我LedgerControllerSpec我创建的代表,在嘲笑的服务功能。当我执行测试时,我得到'范围未定义的错误。 这并的这是我找到最接近的答案;然而,既不解决我的问题。
angular.module(TeamSportApp,[])
.controller('LedgerCtl',函数($范围,LedgerService){
$ scope.ledger = [];
//初始化通过获取图片列表控制器
$ scope.getLedger =功能(){
$ scope.ledger = LedgerService.getLedger();
};
//初始化列表
$ scope.getLedger();
})
和规范
VAR ledgerStaticData = [
{ID:1,名称:项目1,余额:2100},
{ID:2,姓名:项目2,余额:3300},
{ID:3,名:项目3,余额:2000},
{ID:4,名称:ITEM4,余额:1500}
];描述(控制器,函数(){
VAR CTRL,mockLedgerService,$范围;beforeEach(模块('TestApp',[]));
beforeEach(注(函数($ rootScope,$控制器){ mockLedgerService = {
getLedger:功能(){}
}; spyOn(mockLedgerService,'getLedger')andReturn(ledgerStaticData)。
$范围= $ rootScope $新的()。
CTRL = $控制器('LedgerCtl',{$范围:$范围,LedgerService:mockLedgerService});
}));它('应该叫mockLedgerService getLedger',函数(){
期待($ scope.ledger.length).toBe(4); <<< --- SCOPE未定义HERE
});
});
您测试不加载其中控制器被定义模块( TeamSportApp
)。添加以下行:
beforeEach(模块('TeamSportApp'));
另外,定义以下空模块是多余的:
beforeEach(模块(TestApp,[]));
This is a very simple, quite pared down test and controller. My controller 'LedgerCtl' has an injected service 'LedgerService' that I test elsewhere, so in my LedgerControllerSpec I created a function that stands-in for the mocked service. When I execute the test, I get the 'scope undefined' error. this and this are the closest answers I found; however neither solve my issue.
angular.module("TeamSportApp", [])
.controller('LedgerCtl', function($scope, LedgerService) {
$scope.ledger = [];
// init controller by getting list of pics
$scope.getLedger = function() {
$scope.ledger = LedgerService.getLedger();
};
// init list
$scope.getLedger();
})
and the spec
var ledgerStaticData = [
{ "ID": 1, "Name": "Item1", Balance: 2100 },
{ "ID": 2, "Name": "Item2", Balance: 3300 },
{ "ID": 3, "Name": "Item3", Balance: 2000 },
{ "ID": 4, "Name": "Item4", Balance: 1500 }
];
describe('controllers', function(){
var ctrl, mockLedgerService, $scope;
beforeEach(module('TestApp',[]));
beforeEach(inject(function($rootScope, $controller) {
mockLedgerService = {
getLedger: function() {}
};
spyOn(mockLedgerService, 'getLedger').andReturn(ledgerStaticData);
$scope = $rootScope.$new();
ctrl = $controller('LedgerCtl', {$scope: $scope , LedgerService: mockLedgerService });
}));
it('Should call mockLedgerService getLedger', function() {
expect($scope.ledger.length).toBe(4); <<<--- SCOPE UNDEFINED HERE
});
});
Your test doesn't load the module where the controller is defined (TeamSportApp
). Add the following line:
beforeEach(module('TeamSportApp'));
Also, defining the following empty module is unnecessary:
beforeEach(module('TestApp',[]));
这篇关于类型错误:$范围是未定义的角度控制单元测试与茉莉花的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!