我正在测试的服务有这个功能(例如):
doSomething : function(userID,boolean){
var t = otherService.getSomething();
var params = somedata;
var deferred = $q.defer();
if (boolean){
Restangular.one("users",userID).post("copy",params).then(function(data){...
我只想和Restangular上的间谍一起查看是否有正确的参数,端点等使用。
所以我做了一个restangular模拟:
mockRestangular = {
one:function(){return this}
},
post:function(){
},
all:function(){
}
};
},
//also tried:
// one: function(){return {post:function(){}};}
};
但我无法在模拟中的嵌套帖子上设置茉莉花间谍:
spyOn(mockRestangular.one,'post')
我得到post() method does not exist
并且函数调用也失败
someService.doSomething(params)
因为它可以找到post方法。
请注意,我需要将post方法嵌套到一个方法中。如果我只是将一个变为一个对象它将失败,缺少one
方法。
猜猜我错过了一些显而易见的事情,但我整个上午一直围绕着这个问题并完全失败
修改
将andCallThrough()
添加到间谍中,所有部分都朝着正确的方向稳定下来。如果有人有一天会来看,我会在答案中更新。
答案 0 :(得分:2)
解决方案是: 加入第一个间谍:
spyOn(mockRestangular,'one').andCallThrough();
并将对象更改为:
mockRestangular = {
one:function(){
return this //since this can be chained to another one or post method, this way it always has one...
},
post:function(){
},
all:function(){
}
};
编辑:我搬到了Sinon,茉莉花的间谍无论如何都太有限了。
编辑:这是如何在karma / jasmine测试中移动到chai + sinon(不移动到mocha ..):
npm install karma-sinon-chai
添加到karma.conf.js:
将其添加到plugins
列表
'karma-sinon-chai'
并在改变框架:
frameworks: ['jasmine','sinon-chai'],
现在将一个chai-helper.js
文件(名称无关紧要)添加到karma.conf文件中的files
数组中。
该文件应包括:
var should = chai.should(); //you don't need all three, just the style you prefer..
var expect = chai.expect; //notice that using would break existing test and need you to do a little rewrite to fix the matchers. if you don't want to, comment this line out
var assert = chai.assert;