【发布时间】:2014-04-03 22:08:49
【问题描述】:
这是一个非常简单、相当精简的测试和控制器。我的控制器“LedgerCtl”有一个注入服务“LedgerService”,我在其他地方进行了测试,因此在我的 LedgerControllerSpec 中,我创建了一个替代模拟服务的函数。当我执行测试时,我收到“范围未定义”错误。 this 和 this 是我找到的最接近的答案;但是都没有解决我的问题。
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();
})
和规格
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
});
});
【问题讨论】:
-
看起来可能 mockLedgerService.getLedger() 正在返回正确的数据,但该数据未在 $scope 上设置?
标签: angularjs unit-testing controller jasmine