这是一个的非常的简单,非常回吐向下测试和控制器。我控制器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',[]));