2

我正在测试的服务具有此功能(例如):

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 方法中。如果我只是把一个变成一个对象,它会因缺少one方法而失败。

猜猜我错过了一些明显的东西,但我整个早上都在思考这个问题并且完全失败了

编辑:

再加andCallThrough()上间谍,所有的事情都朝着正确的方向解决了。如果有一天有人会来看,我会更新答案。

4

1 回答 1

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

                    }
                };

编辑:我搬到诗浓,茉莉间谍太有限了。

编辑:这是如何在业力/茉莉花测试中转移到 chai+sinon(不转移到 mocha ..):

npm install karma-sinon-chai

添加到 karma.conf.js:

将其添加到plugins列表中

'karma-sinon-chai'

并改变框架:

    frameworks: ['jasmine','sinon-chai'],

现在向 karma.conf 文件中chai-helper.js的数组添加一个文件(名称无关紧要) 。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;
于 2013-11-05T10:01:06.517 回答