类型错误:$范围是未定义的角度控制单元测试与茉莉花茉莉花、单元测试、角度、范围

2023-09-13 04:05:26 作者:给我一场车祸然后抢救无效

这是一个的非常的简单,非常回吐向下测试和控制器。我控制器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});}); 
python一回车就运行,能控制吗

解决方案

您测试不加载其中控制器被定义模块( 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',[]));