Javascript _当从Jasmine中的init方法调用时,foo不是一个函数

Javascript _当从Jasmine中的init方法调用时,foo不是一个函数,javascript,jasmine,Javascript,Jasmine,我正在测试一个控制器,它在实例化过程中调用了一个私有方法_init() 它执行一些服务调用(模拟),并在同一控制器内调用一些私有助手函数。在服务调用的一个成功块中,它尝试调用一个helper函数,然后我得到一个错误,即\u setPersonDropdown不是一个函数 我知道我不能直接调用私有函数,但控制器内调用即使是私有的,也应该是好的吗 控制器 var _init = function () { // Get PersonType list for dropdown

我正在测试一个控制器,它在实例化过程中调用了一个私有方法_init()

它执行一些服务调用(模拟),并在同一控制器内调用一些私有助手函数。在服务调用的一个成功块中,它尝试调用一个helper函数,然后我得到一个错误,即
\u setPersonDropdown不是一个函数

我知道我不能直接调用私有函数,但控制器内调用即使是私有的,也应该是好的吗

控制器

var _init = function () {
        // Get PersonType list for dropdown
        personService.getPersonTypeList().success(function (response) {
            $scope.personTypeList = response;
            _setPersonDropdown();   //<-- this is the line that errors
        })
        .error( function (err) {
            console.log(err);
        });
    };
    _init();
1) 为什么说_setPersonDropdown不是一个函数,而它是在控制器中明确定义的

var _setPersonDropdown = function () {
   // do some stuff
};

。。。根据要求,完整控制器供参考

angular.module('myApp')

    .controller(definition and injections, function (...) {

        var _init = function () {
            // ...some random setup code

            // Get PersonType list for dropdown
            personService.getPersonTypeList().success(function (response) {
                $scope.personTypeList = response;
                _setPersonDropdown();    //<--- the error
            })
            .error( function (err) {
                console.log(err);
            });
        };
        _init();

        var _setPersonDropdown = function () {
            //do the thing
        };
});
angular.module('myApp')
.控制器(定义和注入,功能(…){
var_init=函数(){
//…一些随机设置代码
//获取用于下拉列表的PersonType列表
personService.getPersonTypeList()成功(函数(响应){
$scope.personTypeList=响应;

_setPersonDropdown();//确保在定义
\u setPersonDropdown()
之后调用
\u init()
,或者(我的首选方法)只使用函数声明而不是函数的var定义,这样它将被提升

例如,这是错误的

var _init = function () {
    // Get PersonType list for dropdown
    personService.getPersonTypeList().success(function (response) {
        $scope.personTypeList = response;
        _setPersonDropdown();   //<-- this is the line that errors
    })
    .error( function (err) {
        console.log(err);
    });
};
_init();

var _setPersonDropdown = function() { /* ... */ };
var\u init=函数(){
//获取用于下拉列表的PersonType列表
personService.getPersonTypeList()成功(函数(响应){
$scope.personTypeList=响应;

_setPersonDropdown()//U setPersonDropdown
在控制器内部的定义位置,你能告诉我吗?单看并不能说明问题。谢谢@agmcleod确实是个问题……我不习惯在JS中排序函数声明谢谢,改为函数声明而不是变量,它工作得很好现在
var _init = function () {
    // Get PersonType list for dropdown
    personService.getPersonTypeList().success(function (response) {
        $scope.personTypeList = response;
        _setPersonDropdown();   //<-- this is the line that errors
    })
    .error( function (err) {
        console.log(err);
    });
};
_init();

var _setPersonDropdown = function() { /* ... */ };
var _init = function () {
    // Get PersonType list for dropdown
    personService.getPersonTypeList().success(function (response) {
        $scope.personTypeList = response;
        _setPersonDropdown();   //<-- this is the line that errors
    })
    .error( function (err) {
        console.log(err);
    });
};
_init();

function _setPersonDropdown() { /* ... */ }