Angularjs 类型错误:';未定义';不是函数(在';上评估';作用域$on)

Angularjs 类型错误:';未定义';不是函数(在';上评估';作用域$on),angularjs,unit-testing,sinon,bardjs,Angularjs,Unit Testing,Sinon,Bardjs,当我在布局控制器的搜索事件中向控制器添加了侦听器时,出现了此测试错误 这是侦听器(将其放置在工厂中),并在我的控制器中调用它: function listenToSearchRequest ( viewModel, scope ) { scope.$on( 'search:view', function ( event, data ) { viewModel.pageDetails.search = data; getRequest( viewModel,

当我在布局控制器的搜索事件中向控制器添加了侦听器时,出现了此测试错误

这是侦听器(将其放置在工厂中),并在我的控制器中调用它:

function listenToSearchRequest ( viewModel, scope ) {
    scope.$on( 'search:view', function ( event, data ) {
        viewModel.pageDetails.search = data;
        getRequest( viewModel, scope );
    } );
}
我所有的测试都在进行中,但自从我尝试收听“搜索:查看”事件后,我一直得到:

TypeError: 'undefined' is not a function (evaluating 'scope.$on')
我的测试的一小部分:

describe( 'User Classification Group Controller', function () {
    var controller;
    var $scope;
    var rs;
    var userClassifications = mockData.getMockPaginatedUserClassifications();

    beforeEach( function () {
        bard.appModule( 'app.admin' );
        bard.inject( '$controller', '$q', '$rootScope', '$log', 'authService', '$httpBackend', '$state', 'toastr', 'FORM_MSGS' );
    } );

    bard.verifyNoOutstandingHttpRequests();

    describe( 'when $scope.$parent is not available', function () {

        beforeEach( function () {
            $rootScope = {};
            $scope     = $rootScope;
            controller = $controller( 'ClassificationGroup', {
                '$scope' : $scope
            } );
        } );

        beforeEach( function () {
            $httpBackend.whenGET( '/api/userclassificationgroups/get_all_paginate/10?page=1&search=&sortField=&sortType=' ).respond( 200, userClassifications );
            $httpBackend.flush();
        } );

        it( 'should not set user classification group count', function () {
            expect( $scope.$parent ).to.equal( undefined );
        } );

    } );
} );
这是引发的错误:

PhantomJS 1.9.8 (Linux 0.0.0) User Classification Group Controller when $scope.$parent is not available "before each" hook for "should not set user classification group count" FAILED
TypeError: 'undefined' is not a function (evaluating 'scope.$on')

如何模拟scope.$on以避免所有测试中出现此错误?

将测试用例代码$scope更改为

      $scope = {'$on':function(){}};

为我修复了这个问题。

对于
$scope
,使用
$rootScope.$new()
而不是
{}
怎么样?我已经试过了,但我更多的测试都失败了。我想这是因为我在我的控制器中使用了“controller As”,这就是为什么{}@AnidMonsurI不明白为什么要分配
$rootScope={}
。您是否尝试通过
$scope=$rootScope.$new()
删除该行并创建新的作用域。然后通过使用实际的作用域对象而不是
{}
发布代码来显示“我的更多测试失败”的方式。您不能期望$on方法存在于
{}
上。