gpt4 book ai didi

javascript - 当从 Jasmine 中的 init 方法调用时,_foo 不是一个函数

转载 作者:行者123 更新时间:2023-12-02 16:05:01 24 4
gpt4 key购买 nike

我正在测试一个 Controller ,该 Controller 在实例化期间调用了一个私有(private)方法 _init()。

它执行一些服务调用(这些是模拟出来的)并调用同一 Controller 内的一些私有(private)辅助函数。这一切都工作得很好,直到在服务调用的成功 block 内它尝试调用辅助函数,然后我收到错误 _setPersonDropdown 不是函数

我知道我无法直接调用私有(private)函数,但是即使它们是私有(private)的, Controller 内部调用也应该没问题吗?

Controller

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();

测试

beforeEach(inject(function($controller, $q) {
personService = {
getPersonTypeList: function () {

var expectedResponse = [];

return {
then: function (successFn) {
successFn(expectedResponse);
},
success: function (fn) {
fn(expectedResponse);
},
error: function (fn) {
fn(expectedResponse);
}
};
}
};
}));

controller = $controller('personController', {
$scope: $scope,
$stateParams: $stateParams,
personService: personService
});

1) 为什么说 _setPersonDropdown 不是一个函数,而它在 Controller 中明确定义了

var _setPersonDropdown = function () {
// do some stuff
};
<小时/>

...完整 Controller 供引用,根据要求

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
};
});

最佳答案

确保您在定义 _setPersonDropdown() 之后调用 _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 _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() { /* ... */ }

关于javascript - 当从 Jasmine 中的 init 方法调用时,_foo 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com