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编写的。但是谢谢。