Angularjs 模拟返回成功/错误样式承诺的函数的多个返回值?

Angularjs 模拟返回成功/错误样式承诺的函数的多个返回值?,angularjs,django,unit-testing,jasmine,angular-mock,Angularjs,Django,Unit Testing,Jasmine,Angular Mock,注:从内存中复制的代码 我有一个由生成的方法,该方法在我的服务中具有此签名: angular.module('myModule') .service('PythonDataService',['djangoRMI',function(djangoRMI){ return {getData:getData}; function getData(foo,bar,callback){ var in_data = {'baz':foo,'bing':bar};

注:从内存中复制的代码

我有一个由生成的方法,该方法在我的服务中具有此签名:

angular.module('myModule')
.service('PythonDataService',['djangoRMI',function(djangoRMI){
     return {getData:getData};

     function getData(foo,bar,callback){
         var in_data = {'baz':foo,'bing':bar};
         djangoRMI.getPythonData(in_data)
         .success(function(out_data) {
            if(out_data['var1']){
                 callback(out_data['var1']);
             }else if(out_data['var2']){
                 callback(out_data['var2']);
            }
         }).error(function(e){
            console.log(e)
         });    
    };
}])
我想用Jasmine测试我的服务,所以我不得不嘲笑我的方法。我想打过去,让它返回多个数据

这是我迄今为止尝试过的,从记忆中重现:

describe('Python Data Service',function(){
    var mockDjangoRMI,
    beforeEach(module('ng.django.rmi'));
    beforeEach(function() {
        mockDjangoRMI = {
            getPythonData:jasmine.createSpy('getPythonData').and.returnValue({
                success:function(fn){fn(mockData);return this.error},
                error:function(fn){fn();return}
            })
        }
        module(function($provide) {
            $provide.provide('djangoRMI', mockDjangoRMI);
       });
   });
   it('should get the data',function(){
       mockData = {'var1':'Hello Stackexchange'};
       var callback = jasmine.createSpy();
       PythonDataService.getData(1,2,callback);
       expect(callback).toHaveBeenCalled();
   })
})
但当我为mockData放入另一个具有不同值的it块时,只会拾取其中一个


我猜,由于操作顺序的原因,我分配模拟数据的方式不正确。如何将多个数据模拟到djangoRMI函数中?

我无法直接复制代码,因此我从内存中复制了它。如果代码中有小错误,请随意整理。我不确定你所说的成功/错误风格承诺是什么意思,但基于回调的承诺是什么。getData绝对不是基于承诺的API@NewDev我说的是djangoRMI调用,它包装了$http,函数getpythonda返回一个承诺,然后您可以调用.success,然后调用.error。这就是我想要模拟的函数,因此我可以测试基于外部回调的方法。我已经通过在模拟中使用一个真正的http get承诺将$http注入到模拟中来解决这个问题。由于您处于测试模式,angular mocks$httpbackend将拦截所有调用,然后您可以根据需要使用这些调用返回错误或数据。感觉很邋遢,但确实有用。@kthartsis我是用普通的httpBackend编写的。但是谢谢。