gpt4 book ai didi

javascript - Angular Testing : testing angular Services with private methods

转载 作者:行者123 更新时间:2023-11-30 12:50:13 25 4
gpt4 key购买 nike

假设我在服务上使用了这种方法:

this.search = function (term) {

var deferred = $q.defer();

Restangular.all('search').getList(params)
.then(_onRestResult.bind(this, deferred))
.catch(_onRestError.bind(this, deferred));


return deferred.promise;
}

function _onRestResult(deferred, data) { // notice it isn't on the this

//doSomthing
}

但运行基本测试。

当我将 then 子句更改为匿名函数时,一切都按预期工作,但是当我使用命名的私有(private)函数时,我得到:业力印记:

TypeError: 'undefined' is not a function (evaluating '_onRestResult.bind(this,deferred)')

我知道这种 answers

但它们指的是 Controller 而不是服务 (:)) 并建议不要使用私有(private)方法,但我们真的更喜欢使用它们。

我也遇到了 this answer这表明私有(private)方法已被隐式测试,这正是我的想法,直到我遇到此错误消息。

感谢您的帮助!

编辑:我应该注意到我是这样 mock Restangular 的(如果相关的话):

mockRestangular = {

one:function(){
return this;
},

getList:function(calls){
answer ={results:['1','2']}

var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;
},

post:function(called){
answer = 'posted: '+called;
var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;

},
get: function(called){
answer = this;
var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;
},


all:function(){
return this;
}

};

最佳答案

答案:这变成了一个完全不同的问题。模糊的 karma/chai 错误信息让我误入歧途。实际问题(如果有人再次遇到这个问题,我相信他们会......)是 bind 方法。结果是 phantomjs```` 我们正在运行测试的 headless 浏览器,不支持 bind```(与其他一些 es5 方法一样,不是全部)。使用 chrome/firefox 运行相同的测试效果很好。一旦我明白这是问题所在,那么解决起来就很容易了,只需将 ES5-shim 库(包括绑定(bind))作为包含文件添加到 karma.conf.js 配置中(或者您在任何其他框架中添加助手的方式)和一切正常

关于javascript - Angular Testing : testing angular Services with private methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21230101/

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