Javascript 控制器中的离子单元测试,spyOn未通过

Javascript 控制器中的离子单元测试,spyOn未通过,javascript,unit-testing,ionic-framework,Javascript,Unit Testing,Ionic Framework,这是一个非常简单的测试。。而且它不会过去。。如果有人能对这件事有所了解:) 这是需要测试的控制器代码(部分代码) AppCtrl $scope.requestAuthorization = function() { requestAuthorization(); }; if ($stateParams.requestAuthorization === true) { console.log('$stateParams.requestAuthorization')

这是一个非常简单的测试。。而且它不会过去。。如果有人能对这件事有所了解:)

这是需要测试的控制器代码(部分代码)

AppCtrl

    $scope.requestAuthorization = function() { requestAuthorization(); };

    if ($stateParams.requestAuthorization === true) {
        console.log('$stateParams.requestAuthorization');
        $scope.requestAuthorization();
    }
    function requestAuthorization() {
        console.log('requestAuthorization()');
        // more code here..
    }
测试

describe('AppCtrl', function() {
    var AppCtrl, $rootScope, $scope, $stateParams;

    beforeEach(module('myapp'));

    // disable ionic cache to avoid GET errors
    beforeEach(module(function($provide, $urlRouterProvider) {
        $provide.value('$ionicTemplateCache', function() {});
        $urlRouterProvider.deferIntercept();
     }));

    beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) {
        $rootScope = _$rootScope_;
        $scope = $rootScope.$new();
        $stateParams = _$stateParams_;
        AppCtrl = $controller('AppCtrl',{
            $scope: $scope
        });
        spyOn($scope, 'requestAuthorization');  
        $stateParams.requestAuthorization = true;
    }));

     it('$stateParams.requestAuthorization should be defined', function() {
        expect($stateParams.requestAuthorization).toBeDefined();
    });

    it('$scope.requestAuthorization should be defined', function() {
        expect($scope.requestAuthorization).toBeDefined();
    });

    // this test is not passing.. 
    it('should call requestAuthorization', function() {
        expect($scope.requestAuthorization).toHaveBeenCalled();
    });
});
函数实际上正在被调用,我可以在控制台中看到console.log,但它没有传递

简单的测试,全部通过。。除了最后一个

谢谢您的时间:)


注意:有一个
$stateParams.requestAuthorization
,还有一个
$scope.requestAuthorization
。第一个是布尔值,另一个是函数,函数未传递。

在beforeEach块中,在实例化控制器之前定义$stateParams

beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) {
            $rootScope = _$rootScope_;
            $scope = $rootScope.$new();
            $stateParams = _$stateParams_;

            $stateParams.requestAuthorization = true;

            AppCtrl = $controller('AppCtrl',{
                $scope: $scope,
                $stateParams: $stateParams
            });
            spyOn($scope, 'requestAuthorization');  

        }));

不,不工作:/,它实际上很奇怪,我在另一个控制器上有一个非常类似的测试,它正在工作。。但不在此控制器中。。